root@raspberrypi:~# cat >test
echo succeed
root@raspberrypi:~# <test
root@raspberrypi:~# `<test`
succeed
我想原因是enter
信号缺失。但是如何发送enter
在Bash和其他一些shell中,`<test`
是以下项的简写`cat test`
:
$(cat file)
可以用等效的命令替换命令,但是速度更快$(< file
)。
(`...`
-style命令替换也是如此)。
那意味着你的命令
$ `<test`
是相同的
$ `cat test`
-也就是说,将test
文件的内容插入命令行中,以代替命令替换表达式,然后,由于它位于命令的开头,因此以第一个单词作为命令名执行结果。
另一方面,
$ <test
只是一个空命令,其标准输入从test
文件重定向到任何类似POSIX的shell中。它本质上与: <test
:相同:不执行任何操作均会成功。这不是很有用,但是如果不存在或无法读取,则会引发错误test
。
相反的方向>test
会创建或截断test
,有时很有用。
Bash,zsh,ksh等中`<test`
and的特殊行为$(<test)
与命令替换通常复制同一命令的普通行为的方式不一致。对于诸如以下命令,它是一种便利和性能功能
printf '%s@%s\n' $(<username.txt) $(<host.txt)
想要将文件内容读入命令行,并节省一个额外的过程(不生成cat
并让外壳读取文件本身)。
区别与之无关Enter或类似,这只是一种特殊情况。我不建议使用$(<file)
执行文件:使用.
或source
或类似的方法来说明您在做什么(即使eval
确实涉及到它)。我什$(<file)
至不建议您使用它,除非您确实确定自己处于一个紧要关头,在其中产生一个额外的cat
过程很重要,因为这种情况很少见,人们会以您在这里的确切方式感到困惑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句