Bash - 在变量名内扩展变量名

Bash - 在变量名内扩展变量名

在一个简单的 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

您也可以定义fvlv作为类型名称引用:代码类似,只是不需要!扩展变量:-

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

相关内容