그것은 무엇을 하는가! 배열로 하시나요?

그것은 무엇을 하는가! 배열로 하시나요?

배열의 값뿐만 아니라 인덱스 번호도 인쇄하려고 합니다. 나는 무엇을 해야할지 몰랐고 이 사이트의 다른 사람들의 과거 게시물을 통해 알아냈습니다. 그들은 기본적으로 하나를 추가했습니다! "for"문에서. 하지만 실제로 "!"이 무엇을 의미하는지 이해하지 못합니다. 실제로 그렇게 하고 있어요. 제가 이해할 수 있도록 누가 좀 알려주세요.이것이 작동합니까(즉, 값 대신 $i의 인덱스를 인쇄합니까)?

$ cat test6
declare -a car_models
car_models=( honda toyota bmw )

for i in "${!car_models[@]}" ## Meaning of ! in this line plz
do
echo " $i ${car_models[$i]}" 
done
$ ./test6
 0 honda
 1 toyota
 2 bmw

답변1

"${!car_models[@]}"말 그대로 배열의 인덱스를 제공합니다 car_models.

매뉴얼에서:

배열의 키(인덱스)와 값을 얻을 수 있습니다. 배열 변수 이름에 할당된 인덱스로 확장됩니다 ${!name[@]}. ${!name[*]}큰따옴표 처리는 특수 매개변수 @*큰따옴표 확장과 유사합니다.

인덱스 배열 및 연관 배열에서 작동합니다.

$ bash -c 'a=([10]=foo bar doo); echo "${!a[@]}"'
10 11 12
$ bash -c 'declare -A aa=([foo]=123 [bar]=456); echo "${!aa[@]}"'
bar foo

관련 정보