Accessing array index variable from bash shell script loop?
I want to access the variable array index while looping through an array in my bash shell script
myscript.sh
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in ${AR[*]}; do
echo $i
done
The result of the above script is.
foo
bar
baz
bat
The result I seek is.
0
1
2
3
How do I alter my script to achieve this?
Best Answer
You can do this using List of array keys . From the bash man page.
${!name[@]}
${!name[*]}List of array keys. If name is an array variable, expands to the list of array indices (keys) assigned in name. If name is not an array, expands to
0if name is set and null otherwise. When@is used and the expansion appears within double quotes, each key expands to a separate word.
For your example.
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
for i in "${!AR[@]}"; do
printf '${AR[%s]}=%s\n' "$i" "${AR[i]}"
done
This results in.
${AR[0]}=foo
${AR[1]}=bar
${AR[2]}=baz
${AR[3]}=bat
Note that this also works for non-successive indexes
#!/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
This results in.
${AR[3]}=foo
${AR[5]}=bar
${AR[7]}=bat
${AR[25]}=baz