当我在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] 删除。
我来说两句