ディレクトリにあるすべてのファイル名を変数に入れたいと思います。私は以下のように書いた:シェルスクリプトで空白を処理する方法
DATA=`ls`
for LOOP in $DATA
do
echo $LOOP
done
しかし、いくつかのファイル名には空白が含まれています。 "A B.txt"という名前のファイルは、2つのファイル "A"と "B.txt"に解釈されます。
この問題を解決するにはどうすればよいですか?
ディレクトリにあるすべてのファイル名を変数に入れたいと思います。私は以下のように書いた:シェルスクリプトで空白を処理する方法
DATA=`ls`
for LOOP in $DATA
do
echo $LOOP
done
しかし、いくつかのファイル名には空白が含まれています。 "A B.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
を介して送信されたときに[なぜあなたはLSの出力を解析するべきではありません動作します](http://mywiki.wooledge.org/ParsingLs) –