为什么Grave Keys会导致CSH将字符串解释为命令?

时间:2015-05-15 19:37:04

标签: csh

我有一个运行perl脚本的csh脚本。命令是

composer dump-autoload

这会引发错误读取

`./test.pl`

csh脚本不包含“Hello”,但perl脚本包含行读取

Hello: Command not found.

删除原始命令周围的密钥可以修复错误。发生了什么事?

1 个答案:

答案 0 :(得分:4)

因为这是他们想要做的事情。

来自我系统上的man cshtcsh的文档):

  

命令替换

     

命令替换由``'括起来的命令指示。这样的输出          命令在空格,制表符和换行符中分成单独的单词,空单词是          丢弃。输出是可变的,命令被替换并代替原始字符串。

     

双引号内的命令替换(“”“)保留空格和制表符;仅保留换行符          强迫新词。在任何情况下,单个最终换行都不会强制使用新单词。它是          因此,即使命令,命令替换也只能产生一个单词的一部分          输出完整的一行。

     

默认情况下,自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