在 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}实际上不起作用。

看:

相关内容