为什么在 bash 中 {{a,b}.{c,d}} 扩展为 {ac} {ad} {bc} {bd}

Neo*_*rns 7 bash brace-expansion

在 bash 中 echo {{a,b}.{c,d}} 扩展为 {a.c} {a.d} {b.c} {b.d} 虽然在 bash 手册中没有提到我所做的输入类型的大括号扩展

我的问题是为什么输出不像这个ac ad bc bd

Kus*_*nda 11

在 中bash, 的扩展{word}{word}当单词不包含范围 ( ..) 或逗号时。

在您的情况下,word恰好包含两个大括号扩展。这些从左到右展开,所以你得到,第一个{a.{c,d}} {b.{c,d}},然后{a.c} {a.d} {b.c} {b.d}哪个是最终结果。

请注意,外部大括号没有展开,因为它们不包含范围或逗号。你会得到类似的结果@{a,b}.{c,d}@

如果您尝试过,{{a,b},{c,d}}您将有三个扩展(扩展分三个步骤完成,每个扩展一组大括号)。先外面的进{a,b} {c,d},然后左边的进a b {c,d},最后a b c d,就是最后的结果。

另请参阅:为什么“cat {foo}”不输出 foo,但“cat {foo,bar}”会输出?