一尘不染

选择文件时bash脚本中意外标记'('附近的语法错误

linux

运行此脚本 bash ./cleanup.bash

#!/bin/bash
## going to dir moving stuff
rm -rf !(composer.json|.git)

给出错误:

cleanup.bash:第10行:意外令牌’(’附近的语法错误
cleanup.bash:第10行:’rm -rf!(composer.json | .git)’

但是如果我直接在终端中运行没问题 rm -rf !(composer.json|.git)

我试着去掉所有其他行,仍然得到错误。

如何在bash脚本中正确输入?


阅读 281

收藏
2020-06-02

共1个答案

一尘不染

我猜您的问题是由于从脚本运行时未设置shell扩展glob选项。当您声称它可以在命令行中运行时,您已经以某种方式设置了extglob允许!()全局标记。

由于bash脚本无论何时以a
#!/bin/bash开头都将启动新的子shell,因此在父shell中设置的扩展选项可能不会反映在新shell中。要使其生效,请在爆炸后在脚本中进行设置

#!/bin/bash

shopt -s extglob

## going to dir moving stuff
rm -rf !(composer.json|.git)
2020-06-02