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

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

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

我的问题是为什么输出不是这样的AC 广告 BC BD

答案1

在 中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}”却输出foo?

相关内容