我正在寻找与此 BASH 构造等效的 ZSH:
for file in *.{abc,def,ghi}; do #loop through all files with the extensions .abc, .def and .ghi
我找不到 ZSH 的类似结构。或者也许没有?
我正在寻找与此 BASH 构造等效的 ZSH:
for file in *.{abc,def,ghi}; do #loop through all files with the extensions .abc, .def and .ghi
我找不到 ZSH 的类似结构。或者也许没有?
假设您有以下文件:
foo.abc
,bar.abc
,qux.ghi
. 在 bash 中,循环体被执行了四次:withfoo.abc
,bar.abc
,*.def
(with a literal*
) 和qux.ghi
. 在 zsh 中,使用默认选项,根本不执行循环,而是得到错误为了避免在未扩展的通配符模式上运行循环并在现有文件(如果有)上运行循环,请添加
N
glob 限定符。您还可以使用
|
operator,这样您就拥有一个模式而不是多个模式。(大括号不是通配符模式,它们只是在解析通配符之前发生的文字字符串扩展,即*.{abc,def,ghi}(N)
只是 的简写*.abc(N) *.def(N) *.ghi(N)
)请注意,您仍然需要
N
glob 限定符,否则如果没有文件匹配,您将收到错误消息。N
您可以打开null_glob
选项(setopt null_glob
) ,而不是使用glob 限定符。这在脚本中通常是有意义的。请注意,在 bash 中,您需要激活类似的选项 (shopt -s nullglob
) 以避免在未扩展的模式上运行循环体。