这是我的代码:
$ 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
如果您有按字符串索引的数据,请使用关联数组。
答案2
我的代码变得有点难看,但它是:
for i in {1..2}; do var="abc_$i";echo $(eval echo \$$var); done
这个想法是创建变量名称和变量eval
的使用。echo
您需要反斜杠,否则变量$$
将被解释。
PS 也许考虑使用数组是明智的。