それは何をするのか!配列にしますか?

それは何をするのか!配列にしますか?

配列の値だけでなくインデックス番号も印刷したいと思います。私は何をすべきかわからず、このサイトの他の人の過去の投稿で見つけました。彼らは基本的に1つを追加しました! 「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

おすすめ記事