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