인용할 때 "${ARRAY[@]}"가 여러 단어로 확장되는 이유는 무엇입니까?

인용할 때 "${ARRAY[@]}"가 여러 단어로 확장되는 이유는 무엇입니까?

"${ARRAY[@]}"()を引用すると、なぜ"..."複数の単語に拡張されるのかわかりません。

たとえば、

IFS=":" read -ra ARRAY <<< "foo:bar:baz"
for e in "${ARRAY[@]}"; do echo $e; done
foo
bar
baz

引用符で展開された他の変数(例"${VAR}":)は単語を生成します。

VAR="foo bar baz"
for a in "${VAR}"; do echo $a; done
foo bar baz

誰でもこれをLinux初心者に説明できますか?

答え1

큰따옴표로 인덱싱하면 배열이 @요소 목록으로 확장되기 때문입니다. man bash"배열" 아래에 문서화되어 있습니다 .

단어가 큰따옴표로 묶인 경우 ...는 ${name[@]}name의 각 요소를 별도의 단어로 확장합니다.

모든 요소가 $IFS 문자의 단어 분리기 및 와일드카드(즉, 또는 확장)의 영향을 받지 않도록 하려면 *?동작이 필요합니다 [...].

#!/bin/bash
arr=(a 'b c' d)
for el in  ${arr[@]}  ; do echo "1: $el" ; done
for el in "${arr[@]}" ; do echo "2: $el" ; done

산출:

1: a
1: b
1: c
1: d
2: a
2: b c
2: d

$IFS배열을 단일 문자열( 의 첫 번째 문자로 구분된 배열 요소 , 기본값은 공백) 로 확장하려는 경우 사용합니다 "${arr[*]}".

"${arr[@]}"배열 확장을 위한 및 구문은 "${arr[*]}"위치 인수의 및 구문과 유사합니다 "$@"."$*"

関連情報