首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash文件全局异常

bash文件全局异常
EN

Stack Overflow用户
提问于 2016-05-28 17:35:39
回答 1查看 110关注 0票数 1

bash手册(我在OSX上使用4.3.42版本)指出,垂直条形的‘\’字符被用作文件全局中多个文件模式的分隔符。因此,以下内容应适用于我的系统:

代码语言:javascript
复制
projectFiles=./config/**/*|./support/**/*

但是,第二种模式在该目录结构中的最后一个文件上提供了一个“拒绝权限”,因此该模式永远不会被解析为projectFiles。我试过了这方面的变化,包括在括号中包装模式,

代码语言:javascript
复制
projectFiles=(./config/**/*)|(./support/**/*)

这是在手册中列出的,但也不起作用。

对我做错了什么有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-28 17:46:23

你可能指的是man bash中的这个部分

If the extglob shell option is enabled using the shopt builtin, several extended pattern matching operators are recognized. In the following description, a pattern-list is a list of one or more patterns separated by a |. Composite patterns may be formed using one or more of the fol- lowing sub-patterns: ?(pattern-list) Matches zero or one occurrence of the given patterns \*(pattern-list) Matches zero or more occurrences of the given patterns +(pattern-list) Matches one or more occurrences of the given patterns @(pattern-list) Matches one of the given patterns !(pattern-list) Matches anything except one of the given patterns

正如所解释的那样,|分隔符在模式列表中工作,但只在启用extglob时:

代码语言:javascript
复制
shopt -s extglob

试试这个:

代码语言:javascript
复制
projectFiles=*(./config/**/*|./support/**/*)

正如@BroSlow在评论中指出的:

请注意,您可以在不使用extglob./{config,support}/**/*的情况下这样做,后者只需扩展到带有配置的路径和带有支持空间分隔的路径,然后进行模式匹配。或者./@(config|support)/**/*extglob。这两种看起来都更干净。

@chepner的评论也值得一提:

而且,在简单的赋值过程中根本不执行全局操作;尝试foo=*,然后将echo "$foo"echo $foo进行比较。在数组赋值过程中确实会出现全局现象;请参阅foo=(*); echo "${foo[@]}"

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37501965

复制
相关文章

相似问题

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