"${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[*]}"
위치 인수의 및 구문과 유사합니다 "$@"
."$*"