2015-05-15 15 views
0

我有一個運行perl腳本的csh腳本。該命令是爲什麼Grave Keys導致CSH將字符串解釋爲命令?

`./test.pl` 

這將引發錯誤讀取

Hello: Command not found. 

這個csh腳本不包含「你好」,但Perl腳本包含一行讀

print "Hello world!\n"; 

拆除墳墓鍵圍繞原始命令修復錯誤。到底是怎麼回事?

+1

你看到的一直是反引號,因爲至少是Bourne shell是在1977年〜創建是如何工作的。如果您不需要該功能,請不要使用它們。幾乎所有的shell都支持反引號來替換命令。祝你好運。 – shellter

回答

4

因爲這就是他們應該做的。

man csh我的系統上(這是tcsh的文檔):

命令替換

命令替換被封閉在``」的命令表示。來自這樣的 命令的輸出在空白處,製表符和換行符處分成單獨的單詞,並且丟棄空字 。輸出是可變的和命令替換,並放置在原始字符串的位置。雙引號內

命令替換(`「')保留空白和tab;只有換行 力新字的單個最終換行符並不強制在任何情況下一個新的字是 因此,有可能爲一個命令替換到。即使命令 輸出完整的一行

默認情況下,自版本6.12開始,shell將用空格替換命令中的所有換行符和回車符,如果通過取消設置csubstnonl ,換行符 照常單獨執行命令。

如果分配給Hello World!的環境變量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 
+0

我不關注。我認爲它分開了在後臺運行的過程? – DeepDeadpool

+1

沒有。反引號的內容作爲shell命令執行(在前臺)。它的輸出被捕獲,反引號被輸出代替。然後執行帶有(現在替代的)反引號的命令。 – ikegami

+1

@ user3263864,要在後臺啓動進程,請追加'&':'./test。pl&' – ikegami

相關問題