Bash 如何处理shell脚本中的空白
我想把dir中的所有文件名放到一个变量中。我写道:Bash 如何处理shell脚本中的空白,bash,shell,Bash,Shell,我想把dir中的所有文件名放到一个变量中。我写道: DATA=`ls` for LOOP in $DATA do echo $LOOP done 但是有些文件名包括空白。然后名为“ab.txt”的文件将被解释为两个文件“A”和“B.txt” 如何解决这个问题?不要解析ls的输出,这几乎总是会给您带来麻烦 只需使用: for loop in * ; do echo "$loop" done 不要解析ls的输出,这几乎总是会给您带来麻烦 只需使用: for loop in * ; do
DATA=`ls`
for LOOP in $DATA
do
echo $LOOP
done
但是有些文件名包括空白。然后名为“ab.txt”的文件将被解释为两个文件“A”和“B.txt”
如何解决这个问题?不要解析
ls
的输出,这几乎总是会给您带来麻烦
只需使用:
for loop in * ; do
echo "$loop"
done
不要解析
ls
的输出,这几乎总是会给您带来麻烦
只需使用:
for loop in * ; do
echo "$loop"
done
虽然建议不要解析
ls
output是一种普遍的智慧,但可以强制命令输出可解析的数据:
`ls -b`
将非图形字符(包括空格)替换为C样式转义符
然而,这在shell for loop中不起作用,但是可以在输出通过管道发送到另一个命令时使用
例如:
$ 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
output是一种普遍的智慧,但可以强制命令输出可解析的数据:
`ls -b`
将非图形字符(包括空格)替换为C样式转义符
然而,这在shell for loop中不起作用,但是可以在输出通过管道发送到另一个命令时使用
例如:
$ 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