我想創建一個多維的關聯數組,但需要一些幫助。我回顧了the page suggested in this SO answer,但它讓我更加困惑。到目前爲止,這裏是我有:BASH:需要一些幫助與多維關聯數組
腳本:
#!/bin/bash
declare -A PERSONS
declare -A PERSON
PERSON["FNAME"]='John'
PERSON["LNAME"]='Andrew'
PERSONS["1"]=${PERSON[@]}
PERSON["FNAME"]='Elen'
PERSON["LNAME"]='Murray'
PERSONS["2"]=${PERSON[@]}
for KEY in "${!PERSONS[@]}"; do
TMP="${PERSONS["$KEY"]}"
echo "$KEY - $TMP"
echo "${TMP["FNAME"]}"
echo "${TMP["LNAME"]}"
done
輸出:
1 - John Andrew
John Andrew
John Andrew
2 - Elen Murray
Elen Murray
Elen Murray
正如你可以看到試圖訪問$ TMP陣列的具體指標中的循環返回整個數組。
[Q]爲了分別訪問for
循環中的$ TMP數組的「FNAME」和「LNAME」索引,我需要做些什麼?
謝謝。
我試過你的解決方案,但這不是我所期待的,因爲當我循環$人時,我得到這4個元素以下命令:「1,LNAME = Andrew」,「2,FNAME = Elen」,「1,FNAME = John」和「2,LNAME - Murray」,我無法工作。對於bash爲什麼不支持多維數組,我仍然感到困惑。在一天結束時,我所做的就是將一個變量($ PERSON數組)賦值給一個數組元素($ PERSONS [「X」])。爲什麼這個變量i的類型很重要? bash是否檢查並防止將數組分配給數組元素? – Max 2011-05-27 12:07:41
@ user359650,這是bash開發者的設計決定。引用了bash手冊中的內容:「Bash提供了一維索引和關聯數組變量。」你正在做的是將一個字符串(「John Andrew」)分配給一個數組索引。我認爲你需要再看看你在做什麼 - 如果你絕對必須擁有多維數組,那麼你使用的是錯誤的工具。 – 2011-05-27 13:10:48
另外,關聯數組沒有特定的順序。 – 2011-05-28 00:01:59