다음 코드를 사용하세요.
#! /bin/bash
declare -a arr=("element1"
"element2" "element3"
"element4" )
echo "1"
echo "${arr[@]}"
echo "2"
echo ${arr[*]}
출력은 다음과 같습니다
1
element1 element2 element3 element4
2
element1 element2 element3 element4
따라서 출력은 동일합니다.
그렇다면 언제 한 가지 방법을 다른 방법보다 사용해야 합니까?
답변1
다음 세 가지 루프의 출력을 비교하십시오.
#!/bin/bash
declare -a arr=("this is" "a test" "of bash")
echo "LOOP 1"
for x in ${arr[*]}; do
echo "item: $x"
done
echo
echo "LOOP 2"
for x in "${arr[*]}"; do
echo "item: $x"
done
echo
echo "LOOP 3"
for x in "${arr[@]}"; do
echo "item: $x"
done
위 스크립트는 다음과 같은 출력을 생성합니다.
LOOP 1
item: this
item: is
item: a
item: test
item: of
item: bash
LOOP 2
item: this is a test of bash
LOOP 3
item: this is
item: a test
item: of bash
어떤 것의 목적을 가리킨다."${array[@]}"
큰따옴표로 묶음공백이 포함된 경우에도 배열의 항목을 유지하지만 해당 "${array[*]}"
정보를 사용하거나 잃습니다 ${array[*]}
.
bash(1)
이에 대해서는 매뉴얼 페이지의 "배열" 섹션에 설명되어 있습니다 .
참조 배열의 모든 요소를 사용할 수 있습니다
${name[subscript]}
. 경로 이름 확장과의 충돌을 방지하려면 중괄호가 필요합니다. 아래 첨자가@
또는*
이면 단어는 name의 모든 구성원으로 확장됩니다. 이러한 아래첨자는 단어가 큰따옴표 안에 나타날 때만 다릅니다. 단어가 큰따옴표로 묶인 경우${name[*]}
단일 단어로 확장되고 각 배열 구성원의 값은 IFS 특수 변수의 첫 번째 문자로 구분되며${name[@]}
name의 각 요소는 별도의 단어로 확장됩니다.