2017-02-19 98 views
0

假設我已經創建了一個關聯數組aaa,其中declare -A aaaaaa[bbb]=0,我有var=aaa。我怎樣才能讓1 aaa[bbb]增加只用varbbb因爲我可能不知道在運行時數組的確切名稱。BASH:根據變量的名稱修改數組的內容

我試圖eval "(($var[bbb]++))",但沒有奏效。

謝謝!

+1

您的代碼爲我工作。你在用什麼外殼?它如何失敗?你如何檢查你的代碼的結果? – Fred

+1

順便說一句,使用'eval'可能開闢代碼注入風險,如果您不能保證變量的內容是安全的(例如,如果var'的'內容作爲參數傳遞或從文件中讀取)。 – Fred

+0

@Fred我嘗試了'echo $ {!var}',只是有一個空行。我正在使用bash。 –

回答

0

我認爲這是足夠重要在回答中要注意的,而不僅僅是一個評論。你在不需要需要eval這裏。算術語句獨立於參數擴展做獨立的變量引用,因此只需使用參數擴展來代替var即可,這與aaa就足夠了。

bash-4.4$ declare -A aaa 
bash-4.4$ aaa[bbb]=0 
bash-4.4$ ((aaa[bbb]++)) 
bash-4.4$ echo ${aaa[bbb]} 
1 
bash-4.4$ var=aaa 
bash-4.4$ (($var[bbb]++)) 
bash-4.4$ echo ${aaa[bbb]} 
2