基于动态变量分配动态变量的最简单方法是什么?

基于动态变量分配动态变量的最简单方法是什么?

这是我的代码:

$ abc_1='hello world'
$ abc_2='now is the time'
$ for i in {1..2}; do var=abc_$i;echo ${!var}; done

输出:
hello world
现在是时候了

如何将两个 do 循环内部语句组合成一个更简单、更高效的语句?

我尝试了以下方法但没有成功:

echo ${!abc_$i}  
echo ${!{abc_$i}}  
echo ${!abc_${i}}  
echo ${!abc_!{$i}}  

谢谢。

答案1

哦,亲爱的,只是不要。如果您有按数字索引的数据,请使用数组,就像在任何编程语言中一样:

arr=('hello world' 'now is the time')
for i in "${!arr[@]}"; do
    printf "element at index %s is '%s'\n" "$i" "${arr[i]}"
done

如果您有按字符串索引的数据,请使用关联数组。

参见例如https://mywiki.wooledge.org/BashGuide/Arrays

答案2

我的代码变得有点难看,但它是:

for i in {1..2}; do var="abc_$i";echo $(eval echo \$$var); done

这个想法是创建变量名称和变量eval的使用。echo您需要反斜杠,否则变量$$将被解释。

PS 也许考虑使用数组是明智的。

相关内容