dir内のすべてのファイル名を変数に入れたい。私は以下のように書いた:
DATA=`ls`
for LOOP in $DATA
do
echo $LOOP
done
ただし、空白を含むファイル名がいくつかあります。次に、「AB.txt」という名前のファイルが2つのファイル「A」と「B.txt」に解釈されます。
この問題を解決する方法は?
の出力を解析しないでくださいls
。ほとんどの場合、問題が発生します。
使用するだけです:
for loop in * ; do
echo "$loop"
done
出力を解析しないというアドバイスは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