Bashシェルスクリプトで配列を繰り返しながら、配列インデックス変数にアクセスしたいと思います。
myscript.sh#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${AR[*]}; do
echo $i
done
上記のスクリプトの結果は次のとおりです。
foo
bar
baz
bat
私が探している結果は次のとおりです。
0
1
2
3
これを達成するためにスクリプトをどのように変更できますか?
答え1
以下を使用してこれを実行できます。配列キーのリスト。bash
マニュアルページから:
${!name[@]}
${!name[*]}
配列キーのリスト。 nameが配列変数の場合、nameに割り当てられた配列インデックス(キー)のリストに展開されます。 name が配列でない場合は、
0
name が設定されている場合は null に展開され、それ以外の場合は null に展開されます。使用して二重引用符内に拡張が発生すると、@
各キーは別々の単語に展開されます。
あなたの例:
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
その結果は次のとおりです。
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
これは非連続インデックスにも当てはまります。
#!/bin/bash
AR=([3]='foo' [5]='bar' [25]='baz' [7]='bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
その結果は次のとおりです。
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz
答え2
Jordanの答えに加えて、次のC
ようなループを実行できますbash
。
for ((idx=0; idx<${#array[@]}; ++idx)); do
echo "$idx" "${array[idx]}"
done
答え3
インデックスと値を同時に表示します(このスクリプトは私にとって効果的でした)。
ARRAY=( "engineer " "CEO" "doctor" "teacher" )
for i in "${!ARRAY[@]}"
do
echo " index---------------content"
echo " $i ${ARRAY[$i]}"
done
答え4
次のことができます。
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
length=${#AR[@]}
for (( i = 0; i < length; i++ )); do
echo "$i"
done
出力:
0
1
2
3