我稱之爲一個文件inp.txt列出3目錄名簡單的命令執行 - 的Bourne shell腳本
#!/bin/sh
while read dirname
do
echo $dirname
"ls -l" $dirname
done < inp.txt
當我運行上面,我得到這個錯誤:
line 5: ls -l: command not found
如果我只是「ls」而不是「ls -l」,它可以正常工作。我在這裏錯過了什麼?
我稱之爲一個文件inp.txt列出3目錄名簡單的命令執行 - 的Bourne shell腳本
#!/bin/sh
while read dirname
do
echo $dirname
"ls -l" $dirname
done < inp.txt
當我運行上面,我得到這個錯誤:
line 5: ls -l: command not found
如果我只是「ls」而不是「ls -l」,它可以正常工作。我在這裏錯過了什麼?
Shell解釋空間作爲參數separaters 。通過將引用放在某個東西上,可以強制shell將它看作一個參數。執行時,shell將第一個參數解釋爲要執行的命令。在這種情況下,你要讓它執行不帶參數的名爲「ls -l」的命令,而不是帶有參數「-l」的「ls」。
您應該刪除ls -l
左右的引號。
擺脫引號。
while read dirname
do
echo "$dirname"
ls -l "$dirname"
done < inp.txt
當你有引號時,你會說「把它當作一個單詞」。 shell查找名爲ls -l
的可執行文件,而不是將參數-l
傳遞給命令ls
。
Nitpicker's note:如果您想正確使用報價,請將其添加到"$dirname"
左右。 否則,如果你有一個名爲「音樂文件」在名稱中有空格的目錄,不帶引號腳本會像對待這兩個目錄名和打印一樣的東西:
ls: Music: No such file or directory
ls: Files: No such file or directory
啊好吧...所以我把報價放在錯誤的地方: - )...謝謝! – sunny8107 2010-08-07 22:25:49
是的,吸取了教訓! – sunny8107 2010-08-07 22:26:36