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



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

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

syntax error near unexpected token `('

为什么它在命令行中工作,而不是在bash脚本中工作?我如何从bash脚本中实现这一点?

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

你有两个选择。首先,在脚本顶部添加以下行:

shopt -s extglob

请注意,由于extglob改变了解析表达式的方式,因此它本身需要在单独的行上,并且不能是块(例如if块)的一部分。

第二,执行脚本时说:

bash -O extglob scriptname

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

最新更新