0

我想将目录中的所有文件名放入变量中。我写如下:

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

但是有一些文件名包含空格。然后名为“A B.txt”的文件将被解释为两个文件“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 样式转义替换非图形字符,包括空格。

然而,这不适用于 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
于 2012-04-29T08:33:04.800 回答