当我在命令行上使用rm -r secrets/!(snapsearch)
时。它可以工作并删除除了snapsearch文件夹以外的秘密文件夹中的所有内容。
但是当我在bash脚本中使用完全相同的命令并执行它时,它会抱怨括号。
syntax error near unexpected token `('
为什么它可以从命令行运行,而不是从bash脚本运行?我怎样才能从bash脚本中完成这项工作?
答案 0 :(得分:1)
您需要在非交互模式下启用extglob
,即执行脚本时。
您有两种选择。首先,将以下行添加到脚本的顶部:
shopt -s extglob
请注意,由于extglob
更改了表达式的解析方式,因此它需要单独位于一个单独的行上,并且不能成为块的一部分,例如一个if
块。
其次,执行脚本说:
bash -O extglob scriptname
(第二个选项不需要更改脚本。)