想寫一個BASH腳本,LOOP某個目錄下所有的文件和子目錄,然而目錄下的文件或子目錄文件名字有些是包含空格的。BASH腳本處理時需要特別小心。
如果我們按照下面的方式來寫:
for e in `ls`
do
echo "$e"
done
你將得不到你想要的。因爲ls命令返回的文件名項中可能包含有空格。
比如目錄包含A.TXT, B C.TXT, CD.TXT。那麼BASH展開ls的返回結果就會是A.TXT B C.TXT CD.TXT。要知道BASH是以空格來作爲分隔符的。所以出來的結果將會是
A.TXT
B
C.TXT
CD.TXT
結果方案有以下可能的兩種:
1. 不用ls命令得到文件/目錄項,而是用通配符*.
for e in *
do
echo "$e"
done
在裏面過濾掉"."和".."項。
2. 寫一個函數,將ls命令結果做爲參數傳進去,然後在函數中LOOP "$@"參數列表。注意這裏不能用$@, $*, 或者"$*"。你應該知道原因。
for e in "$@"
do
echo "$e"
done
還有其它方案嗎?