意外令牌'('附近的语法错误

塔尔

当我在Ubuntu终端中使用以下代码时,它可以正常工作:

rm !(*.sh) -rf

但是,如果我将相同的行代码放在外壳程序脚本(clean.sh)中并从终端运行外壳程序脚本,则会引发错误:

clean.sh脚本:

#!/bin/bash
rm !(*.sh) -rf

我得到的错误:

./clean.sh: line 2: syntax error near unexpected token `('
./clean.sh: line 2: `rm !(*.sh) -rf'

你能帮我吗?

血红素

rm !(*.sh)是一种extglob语法,表示删除具有.sh扩展名的文件以外的所有文件

在您的交互式bash实例中,shell选项extglob处于启用状态:

$ shopt extglob 
extglob         on

现在,当您的脚本在子外壳中运行时,您需要extglob通过在脚本开始处添加以下代码来启用该脚本:

shopt -s extglob

所以您的脚本看起来像:

#!/bin/bash
shopt -s extglob
rm -rf -- !(*.sh)

编辑 :

要删除除.sh扩展名以外所有文件,请使用GLOBIGNORE(因为您不想启用extglob):

#!/bin/bash
GLOBIGNORE='*.sh'
rm -rf *

例子 :

$ ls -1
barbar
bar.sh
egg
foo.sh
spam

$ GLOBIGNORE='*.sh'

$ rm *

$ ls -1
bar.sh
foo.sh

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sh:意外令牌'}'附近的语法错误

来自分类Dev

awk:意外令牌'('附近的语法错误

来自分类Dev

bash:意外令牌'('附近的语法错误

来自分类Dev

意外令牌`('附近的Bash语法错误

来自分类Dev

意外令牌附近的Cron语法错误

来自分类Dev

意外令牌'fi'附近的语法错误

来自分类Dev

-bash:意外令牌附近的语法错误

来自分类Dev

意外令牌'<'附近的语法错误

来自分类Dev

意外令牌'='()附近的语法错误

来自分类Dev

意外令牌'newline'附近的语法错误?

来自分类Dev

意外令牌'('附近的语法错误

来自分类Dev

意外令牌'('附近的语法错误

来自分类Dev

-bash:意外令牌';'附近的语法错误

来自分类Dev

bash:意外令牌'}'附近的语法错误

来自分类Dev

bash:意外令牌'('附近的语法错误

来自分类Dev

awk:意外令牌'('附近的语法错误

来自分类Dev

意外令牌'<'附近的语法错误

来自分类Dev

bash:意外令牌附近的语法错误

来自分类Dev

grep:意外令牌'('附近的语法错误

来自分类Dev

意外令牌'('附近的语法错误

来自分类Dev

意外令牌'{'附近的语法错误

来自分类Dev

意外令牌'iptables'附近的语法错误

来自分类Dev

bash:意外令牌'<'附近的语法错误

来自分类Dev

意外令牌'('附近的语法错误

来自分类Dev

语法错误,在意外令牌'}'附近

来自分类Dev

意外令牌'elif'附近的语法错误

来自分类Dev

bash:意外令牌';'附近的语法错误

来自分类Dev

.bashrc:意外令牌'('附近的语法错误

来自分类Dev

bash中的“意外令牌'elif'附近的语法错误”错误