![Bash - 在变量名内扩展变量名](https://linux22.com/image/1580853/Bash%20-%20%E5%9C%A8%E5%8F%98%E9%87%8F%E5%90%8D%E5%86%85%E6%89%A9%E5%B1%95%E5%8F%98%E9%87%8F%E5%90%8D.png)
在一个简单的 for 循环中,我试图让它增加它所回显的变量。底部的展开版本可以正常工作,并且满足了我的要求,但是我怎样才能让循环以相同的方式工作呢?
for x in 0 1 2 3 4 do
echo -ne $FVAR$x ":: "
echo $LVAR$x
done
echo -ne $FVAR0 ":: "
echo $LVAR0
echo -ne $FVAR1 ":: "
echo $LVAR1
echo -ne $FVAR2 ":: "
echo $LVAR2
echo -ne $FVAR3 ":: "
echo $LVAR3
echo -ne $FVAR4 ":: "
echo $LVAR4
答案1
摘自手册bash
:-
如果参数的第一个字符是感叹号 (!),并且参数不是 nameref,则会引入一个变量间接层。Bash 使用由参数其余部分形成的变量的值作为变量的名称;然后扩展此变量,并在其余替换中使用该值,而不是参数本身的值。这称为间接扩展。
因此,您需要将要扩展的变量的名称存储在单独的变量中,例如:-
for x in 0 1 2 3 4
do fv=FVAR$x
lv=LVAR$x
echo ${!fv} ":: " ${!lv}
done
您也可以定义fv
并lv
作为类型名称引用:代码类似,只是不需要!
扩展变量:-
declare -n fv
declare -n lv
for x in 0 1 2 3 4
do fv=FVAR$x
lv=LVAR$x
echo $fv ":: " $lv
done