0

dir内のすべてのファイル名を変数に入れたい。私は以下のように書いた:

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

ただし、空白を含むファイル名がいくつかあります。次に、「AB.txt」という名前のファイルが2つのファイル「A」と「B.txt」に解釈されます。

この問題を解決する方法は?

4

2 に答える 2

4

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

使用するだけです:

for loop in * ; do
 echo "$loop"
done
于 2012-04-29T08:28:23.047 に答える
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
于 2012-04-29T08:33:04.800 に答える