如何在全局模式(zsh)中使用参数替换


8

我想处理一堆以某些后缀结尾的文件,因此我编写了以下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

为什么不起作用?如何混合参数替换和glob模式?

Answers:


10

它不起作用,因为在in中zsh,变量扩展默认情况下不会进行通配。这就是为什么zsh您可以做到的:

rm -- $file

在其他外壳中时,您需要:

rm -- "$file"

如果您确实想要遍历,则需要明确地要求它,如下所示:

rm -- $~file_pattern

在您的情况下:

for f (*($~EXT)) process-one-file $f

(请注意,按照惯例,我们倾向于将大写变量名用于环境变量)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.