Bash 扩展的 globbing 括号中断数组初始化

Bash extended globbing brackets break array initalization

我使用语句 echo *([!min]).css 获取当前目录中扩展名为 .css 的所有文件名,但带有 [=23 的文件除外=].min.css 扩展名。在 bash.

上有效

但是,当我使用它在 bash 脚本中初始化数组时

files=(*([!min]).css)

它不再起作用了。 Bash 表示某处出现意外的左括号。我的编辑器的语法突出显示也看起来像数组初始化中的 glob 的括号不正确,但是我没能正确。

有什么建议吗?谢谢

编辑: 我在 ArchLinux 上使用 GNU Bash 4.3.033。

要使用 extended globs,您必须启用 extglob shell 选项。把它放在脚本的开头,就在 shebang 的下面:

#!/usr/bin/env bash
shopt -s extglob
#...
files=( !(*.min).css )
#...

请注意,shell 选项不会被继承,因此即使您可能在交互式 bash 脚本中启用了 extglob,您 运行 来自的脚本,您仍然必须明确启用它在脚本中。