我有一个运行perl脚本的csh脚本。命令是
composer dump-autoload
这会引发错误读取
`./test.pl`
csh脚本不包含“Hello”,但perl脚本包含行读取
Hello: Command not found.
删除原始命令周围的密钥可以修复错误。发生了什么事?
答案 0 :(得分:4)
因为这是他们想要做的事情。
来自我系统上的man csh
(tcsh
的文档):
命令替换
命令替换由``'括起来的命令指示。这样的输出 命令在空格,制表符和换行符中分成单独的单词,空单词是 丢弃。输出是可变的,命令被替换并代替原始字符串。
双引号内的命令替换(“”“)保留空格和制表符;仅保留换行符 强迫新词。在任何情况下,单个最终换行都不会强制使用新单词。它是 因此,即使命令,命令替换也只能产生一个单词的一部分 输出完整的一行。
默认情况下,自6.12版以来的shell用空格替换命令中的所有换行符和回车符。如果通过取消设置csubstnonl,换行来关闭它 像往常一样单独执行命令。
如果您将Hello World!
分配给env var TEST
,那么
echo $TEST
$TEST
与
相同echo 'Hello' 'World!'
'Hello' 'World!' # Fails: No program named Hello
因为$TEST
被替换为其内容的拆分版本。这里也一样。
echo `./test.pl`
`./test.pl`
与
相同echo 'Hello' 'World!'
'Hello' 'World!' # Fails: No program named Hello