2017-07-31 75 views
0

我試圖根據變量創建關聯數組。所以下面是我想要做的超級簡化版本(ls命令並不是我真正想要的,只是用於說明目的)...在Bash中爲關聯數組鍵使用變量

我有一個靜態定義的數組(文本-a ,文字-b)。然後我想遍歷該數組,然後創建帶有這些名稱和_AA的關聯數組(所以關聯數組稱爲text-a_AA和text-b_AA)。

我真的不需要附加的_AA,而是在想,因爲$名稱已經在循環使用 它可能有必要避免重名 。

我將需要那些已定義的腳本,並將在腳本的後續部分引用它們,而不僅僅是在下面看到的for循環中,我試圖定義它們......例如,我想稍後,能夠引用text-a_AA [NUM](同樣,使用text-a_AA部分的變量)。顯然,我下面有什麼不起作用......並且從我可以告訴的是,我需要使用namerefs?我試圖讓語法正確,但似乎無法弄清楚...任何幫助將不勝感激!

#!/usr/bin/env bash 
NAMES=('text-a' 'text-b') 
for NAME in "${NAMES[@]}" 
do 
    NAME_AA="${NAME}_AA" 
    $NAME_AA[NUM]=$(cat $NAME | wc -l) 
done 

for NAME in "${NAMES[@]}" 
do 
    echo "max: ${$NAME_AA[NUM]}" 
done 
+0

什麼錯誤? – hedgar2017

+0

哪個版本的Bash允許包含'-'的變量名(而不是'_')?在線[Bash](http://www.gnu.org/software/bash/manual/bash.html)手冊似乎沒有列出選項,Bash 3.2和4.3似乎都不允許。 –

回答

0

您可能希望使用「NUM」作爲關聯數組和文件名的名稱作爲關鍵字。然後,你可以重寫你的代碼爲:

NUM[${NAME}_AA]=$(wc -l < "$NAME") 

然後修改你的循環爲:

for NAME in "${NAMES[@]}" 
do 
    echo "max: ${NUM[${NAME}_AA]}" 
done 

shellcheck.net


順便檢查您的腳本:全部大寫是不是一個好練習命名正常的shell變量。你可能想看看:

+0

Ahhhhh輝煌!我可以翻轉它!爲什麼我沒有想到這個?哈哈,我會試試這個,謝謝! – biren