Answers:
如果总是有两个,则很简单:
for f in file+([0-9]).png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done
请注意,上面的命令将按命令行运行。如果要在脚本中使用它,请shopt -s extglob在该行之前放置某个位置。(extglob默认情况下仅在交互式shell中启用。)
在旧的bash不处理扩展模式的情况下,此丑陋的解决方法将起作用,但最好按照 Leonid的另一个答案中的建议更改逻辑:
for f in file[0-9].png file*[0-9][0-9].png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done
bash您使用哪个版本?我的是4.2.37。
extglob默认情况下不会在交互shell中启用的,但也许你的操作系统附带了bashrc那个打开它(并已加入extglob在2.02-α1来砸)
--enable-extended默认情况下(opt_extended_glob=yesin configre)已启用,但未启用--enable-extended-glob-default(opt_extglob_default=no),这在文档中是不准确的。它必须已由您的OS维护者明确启用。但是要注意的是,不同的bash分布具有不同的默认值。