В простом цикле я пытаюсь увеличить значение переменной. Развернутая версия внизу работает и делает то, что я хочу, но как я могу заставить цикл работать так же?

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 ответ1

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 типа nameref: код будет похожим, за исключением того, что в этом нет необходимости ! чтобы расширить переменные: -

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .