bash文件全局异常

bash文件全局异常,bash,glob,Bash,Glob,bash手册(我在OSX上使用的是版本4.3.42)指出,垂直条“|”字符用作文件全局处理中多个文件模式的分隔符。因此,在我的系统上应该可以使用以下功能: projectFiles=./config/**/*|./support/**/* 但是,第二种模式对该目录结构中的最后一个文件提供“权限被拒绝”,因此该模式永远不会解析为projectFiles。我尝试过不同的方法,包括用括号括起图案 projectFiles=(./config/**/*)|(./support/**/*) 这在手册中

bash手册(我在OSX上使用的是版本4.3.42)指出,垂直条“|”字符用作文件全局处理中多个文件模式的分隔符。因此,在我的系统上应该可以使用以下功能:

projectFiles=./config/**/*|./support/**/*
但是,第二种模式对该目录结构中的最后一个文件提供“权限被拒绝”,因此该模式永远不会解析为projectFiles。我尝试过不同的方法,包括用括号括起图案

projectFiles=(./config/**/*)|(./support/**/*)
这在手册中有规定,但也不起作用


关于我做错了什么有什么建议吗?

您可能指的是:

如前所述,
|
分隔符在模式列表中工作,但仅当启用了
extglob
时:

shopt -s extglob
试试这个:

projectFiles=*(./config/**/*|./support/**/*)
正如在评论中指出的那样:


请注意,您可以在不使用
extglob
/{config,support}/***
的情况下执行此操作,这将只扩展到带有config的路径和带有分隔支持空间的路径,然后执行模式匹配。或使用
extglob
/@(配置|支持)/***
。其中任何一个看起来都更干净

也值得一提的是:


此外,在一个简单的任务中根本不执行全局绑定;尝试
foo=*
,然后将
echo“$foo”
echo$foo
进行比较。在数组赋值过程中会发生全局搜索;参见
foo=(*);回显“${foo[@]}”


您可能在以下章节中提到了这一部分:

如前所述,
|
分隔符在模式列表中工作,但仅当启用了
extglob
时:

shopt -s extglob
试试这个:

projectFiles=*(./config/**/*|./support/**/*)
正如在评论中指出的那样:


请注意,您可以在不使用
extglob
/{config,support}/***
的情况下执行此操作,这将只扩展到带有config的路径和带有分隔支持空间的路径,然后执行模式匹配。或使用
extglob
/@(配置|支持)/***
。其中任何一个看起来都更干净

也值得一提的是:


此外,在一个简单的任务中根本不执行全局绑定;尝试
foo=*
,然后将
echo“$foo”
echo$foo
进行比较。在数组赋值过程中会发生全局搜索;参见
foo=(*);回显“${foo[@]}”


你能链接手册的相关部分吗?在shell脚本中,
|
用于程序之间的管道。您的“权限被拒绝”错误是因为尝试执行
/support/***
解析为的任何内容。此外,在简单的分配过程中根本不会执行全局绑定;尝试
foo=*
,然后将
echo“$foo”
echo$foo
进行比较。在数组赋值过程中会发生全局搜索;参见
foo=(*)
;echo“${foo[@]}`。请注意,您可以在不使用extglob的情况下执行此操作,
/{config,support}/***
,extglob只会扩展到带有config的路径和带有分隔支持空间的路径,然后进行模式匹配。或使用extglob的
/@(配置|支持)/***
。这两种方法看起来都更干净。@janos它并不能单独回答问题,但如果你愿意,你可以将它添加到你的问题中
chepner的
点可能也值得一提。@BroSlow完成了,完成了,谢谢你让我使用它。你能链接手册的相关部分吗?在shell脚本中,
|
用于程序之间的管道。您的“权限被拒绝”错误是因为尝试执行
/support/***
解析为的任何内容。此外,在简单的分配过程中根本不会执行全局绑定;尝试
foo=*
,然后将
echo“$foo”
echo$foo
进行比较。在数组赋值过程中会发生全局搜索;参见
foo=(*)
;echo“${foo[@]}`。请注意,您可以在不使用extglob的情况下执行此操作,
/{config,support}/***
,extglob只会扩展到带有config的路径和带有分隔支持空间的路径,然后进行模式匹配。或使用extglob的
/@(配置|支持)/***
。这两种方法看起来都更干净。@janos它并不能单独回答问题,但如果你愿意,你可以将它添加到你的问题中
chepner的
点可能也值得一提。@BroSlow完成了,完成了,谢谢你让我使用它,@janos…两件事:1)projectFiles=*(/config/***./support/***)不起作用;当运行
ls$projectFiles
2)echo$foo执行文件全局搜索,而echo“$foo”返回“*”-这是一个很好的例子来指出不同之处,是的。。。那是man bash中引起我注意的部分。。。您的另外两个选项--./{config,support}/***和./@(config | support)/***都可以工作。感谢你、布罗斯洛和切普纳的综合回答!谢谢,@janos…两件事:1)projectFiles=*(/config/***/./support/***)不起作用;当运行
ls$projectFiles
2)echo$foo执行文件全局搜索,而echo“$foo”返回“*”-这是一个很好的例子来指出不同之处,是的。。。那是man bash中引起我注意的部分。。。您的另外两个选项--./{config,support}/***和./@(config | support)/***都可以工作。感谢你、布罗斯洛和切普纳的综合回答!