在 Shell 腳本中產生儲存在動態變數下的內容

在 Shell 腳本中產生儲存在動態變數下的內容

我被下面的程式碼困住了,任何幫助將不勝感激:

我正在嘗試將動態生成的變數內的內容分配給另一個變數。但我可以看到變數名稱被分配,而不是變數的值被分配。我嘗試過(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}實際上不起作用。

看:

相關內容