2012-04-29 58 views
0

我想將dir中的所有文件名稱都放到一個變量中。我寫如下:如何在shell腳本中處理空白

DATA=`ls` 
for LOOP in $DATA 
do 
    echo $LOOP 
done 

但有一些文件名包括空白。然後名爲「A B.txt」的文件將被解釋爲兩個文件「A」和「B.txt」。

如何解決這個問題?

回答

4

不要分析ls的輸出,這幾乎總是會讓你陷入困境。

只需使用:

for loop in * ; do 
echo "$loop" 
done 
+1

[爲什麼你不應該分析LS輸出](http://mywiki.wooledge.org/ParsingLs) – 2012-04-29 12:49:15

0

雖然意見不解析ls輸出是一般智慧的命令可以強制轉換爲輸出可分析的數據:

`ls -b` 

將取代非圖形字符,包括空格C式逃脫。

然而這不適用於shell for循環,但可以在輸出通過管道發送到另一個命令時使用。

例子:

$ ls -b 
    A\ B.txt C.txt 

在失敗的循環:

$ for i in $(ls -b) ; do echo $i ; done 
    A\ 
    B.txt 
    C.txt 

當通過管道又發了工作

$ ls -b | xargs -n 1 echo 
    A B.txt 
    C.txt