首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当包含在函数中时,bash extglob模式匹配中断

当包含在函数中时,bash extglob模式匹配中断
EN

Stack Overflow用户
提问于 2021-01-02 04:01:48
回答 1查看 94关注 0票数 1

这是可行的

代码语言:javascript
复制
shopt -s extglob
find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} \;
shopt -u extglob

这将返回一个错误

代码语言:javascript
复制
syntax error near unexpected token `('

function test {
  shopt -s extglob
  find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} \;
  shopt -u extglob
}

test

我遗漏了什么,允许我在函数中使用它?

EN

回答 1

Stack Overflow用户

发布于 2021-01-02 04:11:38

问题是bash需要两次打开extglob

解析脚本时的

执行实际命令时的

通过将shopt包含到函数体中,1.是不满足的。如果您扩大了shopt的范围以包含函数声明,bash将正确解析函数,但在运行它时将失败(即2。不满足):

代码语言:javascript
复制
shopt -s extglob
function test {
    find /usr/!(^*|@*) -maxdepth 0 -cmin +1 -exec echo {} \;
}
shopt -u extglob

错误:

代码语言:javascript
复制
find: ‘/usr/!(^*|@*)’: No such file or directory

因此,只需在脚本的开头打开shopt extglob,就可以了。或者,如果你真的需要在其他地方关闭它,可以在函数内部和外部打开和关闭它:

代码语言:javascript
复制
#! /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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65533232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档