我想处理一堆以某些后缀结尾的文件,所以我编写了以下 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
为什么不起作用?如何混合参数替换和全局模式?
答案1
它不起作用,因为在 中zsh
,默认情况下在变量扩展时不进行通配。这就是为什么zsh
你可以这样做:
rm -- $file
在其他 shell 中,您需要:
rm -- "$file"
如果您确实想要通配符,则需要明确要求,如下所示:
rm -- $~file_pattern
在你的情况下:
for f (*($~EXT)) process-one-file $f
(请注意,按照惯例,我们倾向于使用大写变量名作为环境变量)