我被下面的代码困住了,任何帮助将不胜感激:
我正在尝试将动态生成的变量内的内容分配给另一个变量。但我可以看到变量名称被分配,而不是变量的值被分配。我尝试过(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 页面(底部的关联数组)