In Bash wird
echo {{a,b}.{c,d}}
erweitert auf
{a.c} {a.d} {b.c} {b.d}
Obwohl im Bash-Handbuch für die Art der Eingabe, die ich vorgenommen habe, nichts für die Klammererweiterung erwähnt wird
Meine Frage ist, warum die Ausgabe nicht wie diese ac ad bc bd ist
bash
brace-expansion
Neo_Returns
quelle
quelle
Antworten:
In
bash
der Erweiterung der{word}
ist ,{word}
wenn das Wort einen Bereich nicht enthält (..
) oder ein Komma.In Ihrem Fall enthält
word
zufällig zwei Klammererweiterungen. Diese werden von links nach rechts erweitert, sodass Sie zuerst{a.{c,d}} {b.{c,d}}
und dann{a.c} {a.d} {b.c} {b.d}
das Endergebnis erhalten.Beachten Sie, dass die äußeren Klammern nicht erweitert werden, da sie keinen Bereich oder ein Komma enthalten. Sie würden ein ähnliches Ergebnis mit erhalten
@{a,b}.{c,d}@
.Wenn Sie es versucht
{{a,b},{c,d}}
hätten, hätten Sie drei Erweiterungen (die Erweiterung erfolgt in drei Schritten, wobei jeweils ein Satz Klammern erweitert wird). Zuerst der äußere in{a,b} {c,d}
und dann der linke ina b {c,d}
und schließlicha b c d
das Endergebnis.Siehe auch: Warum gibt "cat {foo}" nicht foo aus, sondern "cat {foo, bar}"?
quelle