在shell脚本中使用括号/ parantheses与在命令行bash中使用它们

时间:2014-01-17 08:54:24

标签: linux bash shell

当我在命令行上使用rm -r secrets/!(snapsearch)时。它可以工作并删除除了snapsearch文件夹以外的秘密文件夹中的所有内容。

但是当我在bash脚本中使用完全相同的命令并执行它时,它会抱怨括号。

syntax error near unexpected token `('

为什么它可以从命令行运行,而不是从bash脚本运行?我怎样才能从bash脚本中完成这项工作?

1 个答案:

答案 0 :(得分:1)

您需要在非交互模式下启用extglob,即执行脚本时。

您有两种选择。首先,将以下行添加到脚本的顶部:

shopt -s extglob

请注意,由于extglob更改了表达式的解析方式,因此它需要单独位于一个单独的行上,并且不能成为块的一部分,例如一个if块。

其次,执行脚本说:

bash -O extglob scriptname

(第二个选项不需要更改脚本。)