基於Bash腳本中的關聯數組,我需要迭代它以獲取鍵和值。如何遍歷Bash中的關聯數組
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
我其實不知道如何同時使用for-in循環拿到鑰匙。
基於Bash腳本中的關聯數組,我需要迭代它以獲取鍵和值。如何遍歷Bash中的關聯數組
#!/bin/bash
declare -A array
array[foo]=bar
array[bar]=foo
我其實不知道如何同時使用for-in循環拿到鑰匙。
的密鑰使用感嘆號訪問:${!array[@]}
中, 值使用${array[@]}
訪問。
可以遍歷這樣的鍵/值對:
for i in "${!array[@]}"
do
echo "key : $i"
echo "value: ${array[$i]}"
done
注意在for
語句中使用引號周圍的變量(加上使用@
代替*
)。如果任何鍵包含空格,這是必要的。
在其他答案的混亂來自一個事實,即你的問題都包含了鍵和值「foo」和「酒吧」。
現在,如果將所有鍵分配給一個數組:'array =($ {!hash [@]})' – 2013-06-06 10:54:41
@ Michael-O:您需要引用參數擴展來保護可能有空白的鍵:'array =(「$ {!hash [@]}」) – 2014-05-22 17:05:42
@DennisWilliamson,非常感謝。我沒有想到這一點。 – 2014-05-23 07:07:04
使用此高階函數以防止pyramid of doom
foreach(){
arr="$(declare -p $1)" ; eval "declare -A f="${arr#*=};
for i in ${!f[@]}; do $2 "$i" "${f[$i]}"; done
}
例如:
$ bar(){ echo "$1 -> $2"; }
$ declare -A foo["flap"]="three four" foo["flop"]="one two"
$ foreach foo bar
flap -> three four
flop -> one two
我不確定這是如何適用的?厄運的金字塔不是一個純粹的美學問題,只能用於面向對象的語言? – 2017-08-02 20:44:37
你能解釋一下嗎? foreach函數有點棘手。我不明白。 – 2018-02-09 10:52:27
$聲明-A陣列=([富] =巴[巴] = FOO)#初始化所有在一次 – anisbet 2014-01-24 16:26:30
對於一個關鍵值的小列表,你可能會考慮這個:'for i in a,b c_s,d;做KEY = $ {i%,*}; VAL = $ {I#*,}; echo $ KEY「XX」$ VAL;完成 - 謝謝! – math 2014-05-16 14:45:36