我想处理一堆以一些后缀结尾的文件,所以我写了下面的 zsh 脚本但它不起作用。
EXT=(.jpg .png .gif)
EXT=${(j.|.)EXT} # EXT becomes '.jpg|.png|.gif'
for f in *($EXT); do # should become '*(.jpg|.png|.gif)' but failed
process-one-file $f
done
Run Code Online (Sandbox Code Playgroud)
为什么不起作用?如何混合参数替换和全局模式?
Sté*_*las 10
它不起作用,因为在zsh,变量扩展时默认情况下不进行通配。这就是为什么zsh你可以这样做:
rm -- $file
Run Code Online (Sandbox Code Playgroud)
在其他 shell 中,您需要:
rm -- "$file"
Run Code Online (Sandbox Code Playgroud)
如果您确实想要通配符,则需要明确地要求它,如下所示:
rm -- $~file_pattern
Run Code Online (Sandbox Code Playgroud)
在你的情况下:
for f (*($~EXT)) process-one-file $f
Run Code Online (Sandbox Code Playgroud)
(请注意,按照惯例,我们倾向于对环境变量使用大写的变量名)