bash 배열 값을 참조 할 때 @와 *의 차이점은 무엇입니까? @ 또는 *이면 배열의 모든 멤버가

이 배쉬 가이드 는 말합니다 :

인덱스 번호가 @ 또는 *이면 배열의 모든 멤버가 참조됩니다.

내가 이것을 할 때 :

LIST=(1 2 3)
for i in "${LIST[@]}"; do
  echo "example.$i "
done

제공합니다 : example.1 example.2 example.3(원하는 결과).

그러나을 사용할 때 대신 ${LIST[*]}example.1 2 3습니다.

왜?

편집 : printf, @ 및 *를 사용할 때 실제로 동일한 결과를 제공합니다.



답변

차이점은 미묘합니다. “$ *”는 하나의 인수를 생성하지만 “$ @”은 별도의 인수로 확장됩니다.

LIST=(1 2 3)
for i in "${LIST[@]}"; do
 echo "example.$i"
done

여러 변수로 목록을 처리 (인쇄)합니다

그러나

LIST=(1 2 3)
for i in "${LIST[*]}"; do
 echo "example.$i"
done

목록을 하나의 변수로 처리합니다.