bash-extglob模式匹配在包含在函数中时中断



这适用于

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打开两次:

  1. 解析脚本时

  2. 当执行实际命令时

通过将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

相关内容

  • 没有找到相关文章

最新更新