Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何处理shell脚本中的空白_Bash_Shell - Fatal编程技术网

Bash 如何处理shell脚本中的空白

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

我想把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
 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