我想將dir中的所有文件名稱都放到一個變量中。我寫如下:如何在shell腳本中處理空白
DATA=`ls`
for LOOP in $DATA
do
echo $LOOP
done
但有一些文件名包括空白。然後名爲「A B.txt」的文件將被解釋爲兩個文件「A」和「B.txt」。
如何解決這個問題?
我想將dir中的所有文件名稱都放到一個變量中。我寫如下:如何在shell腳本中處理空白
DATA=`ls`
for LOOP in $DATA
do
echo $LOOP
done
但有一些文件名包括空白。然後名爲「A B.txt」的文件將被解釋爲兩個文件「A」和「B.txt」。
如何解決這個問題?
不要分析ls
的輸出,這幾乎總是會讓你陷入困境。
只需使用:
for loop in * ; do
echo "$loop"
done
雖然意見不解析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
[爲什麼你不應該分析LS輸出](http://mywiki.wooledge.org/ParsingLs) – 2012-04-29 12:49:15