括号扩展不适用于少于 2 个参数

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 确实是大括号扩展的要求吗?如果是这样,它为什么有用?

Mic*_*mer 8

是的,n > 1 是一个明确的要求

格式正确的大括号扩展必须包含不带引号的左括号和右括号,以及至少一个不带引号的逗号或有效的序列表达式。任何格式不正确的大括号扩展都保持不变。

至于为什么-历史原因,在某种程度上(尽管它是从csh最初复制而来的,但具有其他行为)。有迹象表明,采取命令{}作为文字参数(findparallel和其他更复杂的参数),也其他用途{}在shell语言。因为大括号扩展仅在按字面编写时(而不是从变量中)进行处理,所以实际上没有支持退化扩展的动机,并且有一些理由不支持。


ric*_*ici 5

man bash 状态(强调):

格式正确的大括号扩展必须包含不带引号的左括号和括号,以及至少一个不带引号的逗号或有效的序列表达式。任何格式不正确的大括号扩展都保持不变。

这也是bash 手册的Brace Expansion部分的第五段。

我只能推测其动机,但我怀疑这是为了让您键入{...}不带括号消失的内容。(这将适用于正则表达式重复运算符,仅举一个例子。)