bash 배열 값을 참조 할 때 @와 *의 차이점은 무엇입니까?


15

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

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

내가 이것을 할 때 :

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, @ 및 *를 사용할 때 실제로 동일한 결과를 제공합니다.


그것은 나를 위해 일하는 것 같습니다. @와 *를 모두 시도했지만 두 번 모두 동일한 결과를 생성하는 것 같습니다. 어떤 쉘을 사용하고 있습니까? echo $SHELL출력을 실행 하여 질문에 붙여 넣습니다.
Ramesh

내 예는이 사실 만 발생, 잘못 echo하지와 함께, printf난 그냥 나타났습니다.
arjan


@goldilocks 다른 질문에 관한 것입니다 $*$@. 대답은 비슷하지만 한 질문 은 다른 질문의 일부로 간주 될 수 있지만 다른 질문입니다.
Stéphane Chazelas 2014 년

답변:


17

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

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

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


차이점 echoprintf출처 의 차이를 알고 있습니까? 로 인해 printf상기 목록 * 참조 번호가 여러 변수로서 취급되는 for 루프이다.
arjan

하나의 변수와 여러 변수로 취급되는 것이 무엇을 의미합니까? 차이점을 설명하기 위해 실용적인 예를 제공 할 수 있는지 궁금합니다.
fraxture
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.