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}}세 가지 확장이 제공됩니다(3단계 확장, 각 단계는 브래킷 세트 확장). 먼저 외부 괄호를 로 확장한 {a,b} {c,d}다음 왼쪽 괄호를 로 확장하고 a b {c,d}마지막으로 a b c d이것이 최종 결과입니다.

또한보십시오:"cat {foo}"는 foo를 출력하지 않지만 "cat {foo,bar}"는 왜 출력됩니까?

관련 정보