[英]Bash scripting - Iterating through “variable” variable names for a list of associative arrays
我有一個關聯數組的變量列表,我想迭代並檢索它們的鍵/值對。
我通過列出其所有鍵並獲取值來迭代單個關聯數組,即。
for key in "${!queue1[@]}" do
echo "key : $key"
echo "value : ${queue1[$key]}"
done
棘手的部分是關聯數組的名稱是變量變量,例如,給定count = 5,關聯數組將被命名為queue1,queue2,queue3,queue4,queue5。
我試圖根據計數替換上面的序列,但到目前為止,括號和eval的每個組合都沒有產生更多的錯誤替換錯誤。 例如下面:
for count in {1,2,3,4,5} do
for key in "${!queue${count}[@]}" do
echo "key : $key"
echo "value : ${queue${count}[$key]}"
done
done
非常感謝幫助!
這里的困難源於間接擴展( ${!nameref}
)的語法與從關聯數組( ${!array[@]}
)中提取鍵的語法沖突的事實。 我們只能有一個或另一個,而不是兩者。
我擔心使用eval
,我看不到使用它來提取間接引用的關聯數組的鍵的方法:
keyref="queue${count}[@]"
for key in $(eval echo '${!'$keyref'}'); do ... ; done
但是,在給定鍵的數組中提取值時,可以避免使用eval
並使用間接擴展。 請注意, [key]
后綴必須是擴展的一部分:
valref="queue${count}[$key]"
echo ${!valref}
把它放在上下文中:
for count in {1..5} ; do
keyref="queue${count}[@]"
for key in $(eval echo '${!'$keyref'}'); do
valref="queue${count}[$key]"
echo "key = $key"
echo "value = ${!valref}"
done
done
我能夠使用以下腳本:
for count in {1..5} ; do
for key in $(eval echo '${!q'$count'[@]}') ; do
eval echo '${q'$count"[$key]}"
done
done
請注意,如果任何鍵包含空格,則會中斷。 如果您想處理復雜的數據結構,請使用更強大的語言,如Perl。
我認為這可能有效(但未經測試)。 關鍵是將索引視為變量的全名。 (也就是說,數組queue5
可以被視為名為queue5[this]
, queue5[that]
等的變量序列。)
for count in {1,2,3,4,5} do
assoc="queue$count[@]"
for key in "${!assoc}" do
echo "key : $key"
val="queue$count[$key]"
echo "value : ${!val}"
done
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.