我想将dir中的所有文件名都放到变量中。我写道如下:
DATA=`ls`
for LOOP in $DATA
do
echo $LOOP
done
但是有些文件名包含空白。然后名为“A B.txt”的文件将被解释为两个文件“A”和“B.txt”。
如何解决这个问题?
答案 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