[Happy BASH] BASH中麻煩的空格處理

想寫一個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

還有其它方案嗎?



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章