"cat"이 JSON 배열을 반복하는 것처럼 보이는 이유는 무엇입니까?

"cat"이 JSON 배열을 반복하는 것처럼 보이는 이유는 무엇입니까?

catBash 3.2에서 JSON이 포함된 구분된 문서를 출력하려고 할 때 이 동작 때문에 혼란스러워졌습니다.

입력하다:

$ cat <(cat <<EOF
> {"x":[{"a":1,"b":2}]}
> EOF)

산출:

{"x":["a":1]}
{"x":["b":2]}

어떻게 되어가나요?

답변1

이것은 단지 bash의 쉘 변수 확장입니다. 이 경우 중괄호 사이의 모든 항목이 반복되어 표현식으로 확장됩니다.

$ echo var{1,2,3,4}
var1 var2 var3 var4

$ echo var{1..10}
var1 var2 var3 var4 var5 var6 var7 var8 var9 var10

답변2

답변은 아니지만 형식화된 설명입니다.

$ cat <(cat <<EOF
> {"x":[{"a":1,"b":2}]}
> EOF)
bash: warning: here-document at line 15 delimited by end-of-file (wanted `EOF')
bash: warning: here-document at line 15 delimited by end-of-file (wanted `EOF')
{"x":[{"a":1,"b":2}]}

새 줄에 오른쪽 대괄호를 넣으세요

$ cat <(cat <<EOF
> {"x":[{"a":1,"b":2}]}
> EOF
> )
{"x":[{"a":1,"b":2}]}

분명히 재현할 수 없습니다.

$ echo $BASH_VERSION
4.3.39(1)-release

답변3

Brace 확장에는 "braceexpand" 옵션이 적용됩니다. 예를 들어:

set +B
cat <(cat <<EOF
{"x":[{"a":1,"b":2}]}
EOF
)

단일 JSON 값을 생성합니다.

관련 정보