Как создать динамическую переменную и присвоить ей значение?

Я пытаюсь создать динамическую переменную и назначить ей 100

#!/bin/bash
.
.   
active_id=$p_val 
flag_$active_id=100

Но я получаю ошибку при этом, любая помощь?

Ответ 1

Вы можете использовать bash объявить директиву и функцию направления следующим образом:

p_val="foo"
active_id=$p_val
declare "flag_$active_id"="100"

ИСПЫТАНИЯ:

> set | grep flag
flag_foo=100

UPDATE:

p_val="foo"
active_id="$p_val"
v="flag_$active_id"
declare "$v"="100"

> echo "$v"
flag_foo
> echo "${!v}"
100

Использование в if condition:

if [ "${!v}" -ne 100 ]; then
   echo "yes"
else
   echo "no"
fi

# prints no

Ответ 2

Я не знаю, для чего это должно быть хорошо, но вы можете добиться такого, как это, с помощью инструкции bash eval.

Следующий код иллюстрирует это.

#!/bin/bash

p_val="TEST"
active_id=$p_val 

eval "flag_$active_id=100"

echo $flag_TEST
eval "echo \$flag_$active_id"

Завершающий echo помещает

100
100

на stdout.