如何处理shell脚本中的空白

时间:2012-04-29 08:26:12

标签: bash shell

我想将dir中的所有文件名都放到变量中。我写道如下:

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

但是有些文件名包含空白。然后名为“A B.txt”的文件将被解释为两个文件“A”和“B.txt”。

如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

不要解析ls的输出,这几乎总会让你遇到麻烦。

只需使用:

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

答案 1 :(得分:0)

虽然不解析ls输出的建议是一般智慧,但可以强制命令输出可解析数据:

   `ls -b`

将使用C风格的转义替换包含空格的非图形字符。

然而,这不适用于shell 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