为什么$

为什么$
root@raspberrypi:~# cat >test
echo succeed
root@raspberrypi:~# <test
root@raspberrypi:~# `<test`
succeed

我猜原因是信号丢失。但是enter如何发送enter

答案1

在 Bash 和其他一些 shell 中,`<test`是相当于以下内容的简写`cat test`:

命令替换$(cat file)可以替换为等效但更快的命令$(< file)。

(-style 命令替换也是如此`...`)。

这意味着你的命令

$ `<test`

是相同的

$ `cat test`

- 也就是说,将test文件的内容插入到命令行中代替命令替换表达式,然后,因为它位于命令的开头,以第一个单词作为命令名执行结果


另一方面,

$ <test

只是一个空命令,其标准输入从test文件重定向,在任何类似 POSIX 的 shell 中。它本质上与: <test:什么都不做并成功。这不是很有用,但它将要test如果不存在或不可读,则引发错误。

相反的方向 ,>test将创建或截断test, 有时很有用。


`<test`Bash、zsh、ksh 等中和的特殊行为$(<test)与命令替换通常复制同一命令的普通行为的方式不一致。对于像这样的命令来说,这是一个便利和性能特征

printf '%s@%s\n' $(<username.txt) $(<host.txt)

想要将文件内容读入命令行,并保存额外的进程(通过不生成cat并让 shell 本身读取文件)。

区别与此无关Enter或类似 - 这只是一个特殊情况。我不建议使用$(<file)来执行文件:使用.source或一些类似的方法来代替说明您正在做什么(即使eval确实如此)。我什至不建议使用$(<file) 根本不除非你真的确定你处于一个紧密的循环中,产生一个额外的cat进程很重要,因为人们会像你在这里一样感到困惑,这种情况并不常见。

相关内容