For loop 如何循环浏览zsh中位于某个路径下的所有文件?

For loop 如何循环浏览zsh中位于某个路径下的所有文件?,for-loop,zsh,For Loop,Zsh,以下是我目前掌握的情况: for file in $(find /path/to/directory -type f); echo $file; done 但我得到了这个错误: zsh: parse error near `done' 您是否可以检查在$file周围添加“是否可以像这样解决此问题: for file in $(find /path/to/directory -type f); echo "$file"; done 编辑: 将do添加到echo之前,并告诉我它是否解决了问题:

以下是我目前掌握的情况:

for file in $(find /path/to/directory -type f); echo $file; done
但我得到了这个错误:

zsh: parse error near `done'

您是否可以检查在
$file
周围添加
是否可以像这样解决此问题:

for file in $(find /path/to/directory -type f); echo "$file"; done
编辑:

do
添加到
echo
之前,并告诉我它是否解决了问题:

for file in $(find /path/to/directory -type f); do echo "$file"; done

无需使用
find
。您可以尝试以下方法:

for file in /path/to/directory/**/*(.); do echo $file; done

  • **
    。所以
    a/**/b
    匹配
    a
    下面的任何
    b
    。它基本上与列表
    find a-name b
    生成的内容相匹配
  • ()
    是一个函数,它告诉zsh只匹配普通文件。它相当于
    查找
    中的
    -type f
    选项
  • $file
    周围不需要双引号,因为
  • 第一个版本是
    for
    循环的常规形式;第二个是没有
    do
    done

出现错误的原因是由于最后一点:在循环中运行单个命令时,您需要同时执行
do
done
或不执行这两个命令。如果要在循环中运行多个命令,则必须使用它们。

zsh
中,与
bash
不同,默认情况下禁用WordSpliting(除非出于某种原因设置了
sh word\u split
),引用变量无效。如果找不到文件,则会打印错误。如何禁用该消息?@LarsNyström您可以将
N
添加到glob限定符e中。g<代码>用于/path/to/directory/***(N.)中的文件;echo$文件。这将为该模式设置
NULL\u GLOB
选项,该选项将从参数列表中删除该模式,而不是报告错误。因此,如果不存在匹配的文件,该命令将有效地减少为
for file in;echo$文件
for file in /path/to/directory/**/*(.); echo $file