2010-05-04 205 views

回答

3

$()在子shell中運行命令封閉,並返回其輸出。前兩個例子試圖運行命令"ls -ltr"。既然你引述的整個命令時,shell會尋找其全名ls -ltr,不是一個名字是ls,並正在通過選項-ltr的命令。第三個示例運行命令ls,用參數-ltr和X獲取命令的輸出。由於$()被雙引號括起來,因此不執行字段拆分和路徑名擴展。

的差的一個例子:

$ ls 
bin 
$ echo $(echo 'b*') 
bin 
$ echo "$(echo 'b*')" 
b* 

也是SUS specification參見命令的擴展。

+0

感謝您的解釋 – jhon 2010-05-04 15:50:21

+0

+1了明顯的例子 – Gillfish 2014-08-07 15:50:59

-2

它可能沒有繼承的環境。如果沒有設置路徑,然後它不能找到ls程序

+0

這個問題無關與環境或路徑。 jamessan的回答是正確的,因爲它與引用規則,參數擴展和命令替換有關。 – jabbie 2010-05-04 15:48:13