我被下面的程式碼困住了,任何幫助將不勝感激:
我正在嘗試將動態生成的變數內的內容分配給另一個變數。但我可以看到變數名稱被分配,而不是變數的值被分配。我嘗試過(echo/eval/!)但沒有任何效果。有人可以幫我解決問題嗎?
目的:分配值24(保存在變數下)msd_ext_len) 到最終計數多變的。
變數聲明
iter_val=1
var_1="msd_ext"
msd_ext_len=24
代碼:
eval "final_count"=\${var_${iter_val}}_len
輸出-->msd_ext_len
預期輸出 -->24
如果我再添加一行程式碼(如下所示)以及上面的程式碼,我將得到輸出:
count_val=${!final_count}
但是這兩行程式碼可以合併成一行程式碼嗎?
答案1
因此,首先,每次您執行類似操作${var_${iter_val}}
(即嘗試將數字附加到變數名稱)時,您應該使用陣列:
arr=(a b c)
arr[1]=x
i=1
echo "${arr[i]}"
如果您需要將某些內容編入索引字串相反,使用關聯數組(declare -A arrayname
在 Bash 中)。
這些的組合,例如在陣列中的某些「物件」上具有不同的屬性,是比較困難的。您可以使用兩個單獨的數組,然後使用foo[i]
和bar[i]
。
如果您仍然需要透過名稱間接指向這些數組,則需要名稱引用。
foo=(a b c)
bar=(x y z)
declare -n arrname=foo
echo "${arrname[i]}"
我無法從您的程式碼中準確地判斷出您的資料結構應該是什麼,因此很難針對這種情況給出答案。
嘗試重寫您的範例,您可以執行以下操作:
varnames=()
varnames[1]=msd_ext
varnum=1
msd_ext_len=24
declare -n srcvar="${varnames[varnum]}_len"
declare -n dstvar=final_count
dstvar=$srcvar
echo $final_count
這仍然需要使用陣列 for varnames
,因為巢狀擴充功能${var_$foo}
實際上不起作用。
看:
- bash 是否支援使用指標?
- BashGuide 上的 Arrays 頁面(底部的關聯數組)