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