Wou*_*eek 4 bash brace-expansion
我期待大括号扩展适用于任意数量的参数。但是,对于 n=1,我得到以下信息:
$ find models/nsf-projects-{7}*
models/nsf-projects-{7}.rdf
Run Code Online (Sandbox Code Playgroud)
对于 n>1 扩展按预期发生,例如:
$ find models/nsf-projects-{6,7}*
find: ‘models/nsf-projects-6*’: No such file or directory
find: ‘models/nsf-projects-7*’: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我已经稍微浏览了 GNU 手册,但没有发现在任何地方明确声明 >1 个参数的要求。
问:n>1 确实是大括号扩展的要求吗?如果是这样,它为什么有用?
是的,n > 1 是一个明确的要求:
格式正确的大括号扩展必须包含不带引号的左括号和右括号,以及至少一个不带引号的逗号或有效的序列表达式。任何格式不正确的大括号扩展都保持不变。
至于为什么-历史原因,在某种程度上(尽管它是从csh
最初复制而来的,但具有其他行为)。有迹象表明,采取命令{}
作为文字参数(find
,parallel
和其他更复杂的参数),也其他用途的{}
在shell语言。因为大括号扩展仅在按字面编写时(而不是从变量中)进行处理,所以实际上没有支持退化扩展的动机,并且有一些理由不支持。
man bash
状态(强调):
格式正确的大括号扩展必须包含不带引号的左括号和右括号,以及至少一个不带引号的逗号或有效的序列表达式。任何格式不正确的大括号扩展都保持不变。
这也是bash 手册的Brace Expansion部分的第五段。
我只能推测其动机,但我怀疑这是为了让您键入{...}
不带括号消失的内容。(这将适用于正则表达式重复运算符,仅举一个例子。)