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 列出名称中带有空格的文件_Bash_Shell_For Loop_Zsh - Fatal编程技术网

Bash 列出名称中带有空格的文件

Bash 列出名称中带有空格的文件,bash,shell,for-loop,zsh,Bash,Shell,For Loop,Zsh,问题 在某些目录中,我有一些文件名中带有空格(或者某些特殊字符) 试图每行列出一个文件,我使用了ls-1,但名称中带有空格的文件并没有按照我的预期进行处理 示例 我有以下三个文件: $ ls -1 My file 1.zip My file 2.zip My file 3.zip 我想列出并处理它们,所以我使用这样的循环: for i in `ls -1 My*.zip`; do # statements echo $i; # Do something with ea

问题

在某些目录中,我有一些文件名中带有空格(或者某些特殊字符)

试图每行列出一个文件,我使用了
ls-1
,但名称中带有空格的文件并没有按照我的预期进行处理

示例

我有以下三个文件:

$ ls -1 
My file 1.zip
My file 2.zip
My file 3.zip
我想列出并处理它们,所以我使用这样的循环:

for i in `ls -1 My*.zip`; do
    # statements
    echo $i;
    # Do something with each file;
done
但就像用空格分隔名称一样:

My
file
1.zip
My
file
2.zip
My
file
3.zip
问题


如何解决这个问题?shell中是否有其他选择?

不使用
ls
,并正确引用

for i in My*.zip
do
  echo "$i"
done

不使用
ls
,并正确引用

for i in My*.zip
do
  echo "$i"
done

不要使用
ls
的输出,请使用:

for f in *.zip; do
    echo "processing $f"
done

不要使用
ls
的输出,请使用:

for f in *.zip; do
    echo "processing $f"
done
默认情况下,以点开头的文件是特殊的,
*
将不匹配它们

默认情况下,以点开头的文件是特殊的,
*
将不匹配它们