ImageMagick脚本通配符语法选择:()还是{}?
图片格式验证:ImageMagick命令语法选择建议
在编写使用magick identify验证图片扩展名与实际格式匹配的脚本时,优先选用带引号的"*.{jp*,png,webp}"语法,理由如下:
一、各语法的兼容性与容错性对比
1. Shell与ImageMagick的语法支持差异
- Shell层面:Bash不支持
*.(jp*|png|webp)这类括号分组语法,仅Zsh支持;而无引号的*.{jp*,png,webp}会被Shell提前展开,若文件夹缺少某类格式文件,Zsh会直接报错,Bash会发出警告。 - ImageMagick层面:两种通配语法(带引号的
{}和())都能直接识别处理,因为引号会阻止Shell展开通配符,让ImageMagick自行解析匹配规则。
2. 实际测试表现(基于GNU bash 3.2.57、zsh 5.9)
ImageMagick命令测试
| 命令 | Bash | Zsh |
|---|---|---|
magick identify *.(jpg|png) | –(无法运行) | ✓(全场景兼容) |
magick identify *.{jpg,png} | ✓‡(缺文件时警告) | ✓†(必须两类文件都存在) |
magick identify "*.{jpg,png}" | ✓(全场景兼容) | ✓(全场景兼容) |
系统file命令测试(对比Shell语法支持)
| 命令 | Bash | Zsh |
|---|---|---|
file *.(jpg|png) | –(无法运行) | ✓(全场景兼容) |
file *.{jpg,png} | ✓‡(缺文件时警告) | ✓†(必须两类文件都存在) |
file "*.{jpg,png}" | –(无法运行) | –(无法运行) |
符号说明:
- ✓ - 可正常运行,支持所有场景:a)同时有JPG和PNG;b)仅PNG;c)仅JPG;d)无对应文件
- ✓† - 可运行,但必须至少有一个JPG和一个PNG
- ✓‡ - 可运行,但缺少某类文件时会发出警告
- – - 无法运行
二、语法选择优先级
- 首选:带引号的
"*.{jp*,png,webp}":跨Bash、Zsh环境全兼容,不管目标文件夹中是否存在对应格式的文件,都能稳定执行,容错性拉满。 - 次选:
*.(jp*|png|webp):仅适用于Zsh环境的脚本,无法在Bash下运行,跨环境脚本禁用。 - 禁用:无引号的
*.{jp*,png,webp}:容错性极差,缺少任意一类文件就会报错或警告,完全不适合脚本场景。
内容的提问来源于stack exchange,提问作者user22996855
相关产品推荐
相关产品推荐

