这适用于
shopt -s extglob
find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} ;
shopt -u extglob
这返回一个错误
syntax error near unexpected token `('
function test {
shopt -s extglob
find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} ;
shopt -u extglob
}
test
我缺少什么,这将允许我在函数中使用它?
问题是bash需要extglob
打开两次:
-
解析脚本时
-
当执行实际命令时
通过将shopt
包含到函数体中,1。不满足。如果将shopt
的范围扩大到包含函数声明,bash将正确解析函数,但在运行函数时会失败(即2。不满足(:
shopt -s extglob
function test {
find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} ;
}
shopt -u extglob
错误:
find: ‘/usr/!(^*|@*)’: No such file or directory
所以,只要在脚本的开头打开shopt extglob
,就可以了。或者,如果你真的需要在其他地方关闭它,可以在功能内外打开和关闭它:
#! /bin/bash
shopt -s extglob
function test {
shopt -s extglob
find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} ;
shopt -u extglob
}
shopt -u extglob
test