${array[*]}와 ${array[@]}의 차이점은 무엇입니까? 언제 다른 것보다 하나를 사용해야합니까? [복사]

${array[*]}와 ${array[@]}의 차이점은 무엇입니까? 언제 다른 것보다 하나를 사용해야합니까? [복사]

다음 코드를 사용하세요.

#! /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의 각 요소는 별도의 단어로 확장됩니다.

관련 정보