How to iterate over associative arrays in Bash
基于bash脚本中的关联数组,我需要对其进行迭代以获取键和值。
1 2 3 4 5 | #!/bin/bash declare -A array array[foo]=bar array[bar]=foo |
实际上,我不明白在使用for-in循环时如何获取密钥。
使用感叹号访问键:
您可以这样迭代键/值对:
1 2 3 4 5 | for i in"${!array[@]}" do echo"key : $i" echo"value: ${array[$i]}" done |
注意在
另一个答案中的混淆来自这样一个事实:您的问题包括键和值的"foo"和"bar"。
您可以使用
1 2 | bash-4.0$ echo"${!array[@]}" foo bar |
然后,迭代键/值对很容易:
1 2 3 4 5 | for i in"${!array[@]}" do echo"key :" $i echo"value:" ${array[$i]} done |
号
使用这个高阶函数来防止厄运金字塔
1 2 3 4 | foreach(){ arr="$(declare -p $1)" ; eval"declare -A f="${arr#*=}; for i in ${!f[@]}; do $2"$i""${f[$i]}"; done } |
。
例子:
1 2 3 4 5 | $ bar(){ echo"$1 -> $2"; } $ declare -A foo["flap"]="three four" foo["flop"]="one two" $ foreach foo bar flap -> three four flop -> one two |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | declare -a arr echo"-------------------------------------" echo"Here another example with arr numeric" echo"-------------------------------------" arr=( 10 200 3000 40000 500000 60 700 8000 90000 100000 ) echo -e" Elements in arr are: ${arr[0]} ${arr[1]} ${arr[2]} ${arr[3]} ${arr[4]} ${arr[5]} ${arr[6]} ${arr[7]} ${arr[8]} ${arr[9]}" echo -e" Total elements in arr are : ${arr[*]} " echo -e" Total lenght of arr is : ${#arr[@]} " for (( i=0; i<10; i++ )) do echo"The value in position $i for arr is [ ${arr[i]} ]" done for (( j=0; j<10; j++ )) do echo"The length in element $j is ${#arr[j]}" done for z in"${!arr[@]}" do echo"The key ID is $z" done ~ |
。