2012-04-29 10 views
0

ディレクトリにあるすべてのファイル名を変数に入れたいと思います。私は以下のように書いた:シェルスクリプトで空白を処理する方法

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

しかし、いくつかのファイル名には空白が含まれています。 "A B.txt"という名前のファイルは、2つのファイル "A"と "B.txt"に解釈されます。

この問題を解決するにはどうすればよいですか?

答えて

4

lsの出力を解析しないと、ほとんどの場合問題が発生します。

ちょうど使用:

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

を介して送信されたときに[なぜあなたはLSの出力を解析するべきではありません動作します](http://mywiki.wooledge.org/ParsingLs) –

0

ls出力を解析しないようアドバイスは、コマンドが出力する解析可能なデータに強制変換することができ、一般的な知恵ですが:

`ls -b` 

はとスペースを含む非グラフィック文字を置き換えますCスタイルのエスケープ。

しかし、これはシェルforループでは機能しませんが、出力がパイプを介して別のコマンドに送信されるときに使用できます。

例:

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

は、forループで失敗:

$ 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 
関連する問題