Как использовать значение переменной в качестве имени другой переменной в bash
Я хочу объявить переменную, имя которой происходит от значения другой переменной, и я написал следующий фрагмент кода:
a="bbb"
$a="ccc"
но это не сработало. Как правильно выполнить эту работу?
6 ответов
eval
используется для этого, но если вы сделаете это наивно, то возникнут неприятные проблемы. Такие вещи, как правило, безопасны:
name_of_variable=abc
eval $name_of_variable="simpleword" # abc set to simpleword
Это ломает:
eval $name_of_variable="word splitting occurs"
Исправление:
eval $name_of_variable="\"word splitting occurs\"" # not anymore
Окончательное решение: поместите текст, который вы хотите назначить, в переменную. Давайте назовем это safevariable
, Тогда вы можете сделать это:
eval $name_of_variable=\$safevariable # note escaped dollar sign
Выход из знака доллара решает все проблемы побега. Знак доллара дословно переживает eval
Функция, которая будет эффективно выполнять это:
eval 'abc=$safevariable' # dollar sign now comes to life inside eval!
И, конечно, это назначение неуязвимо для всего. safevariable
может содержать *
, пробелы, $
и т. д. (оговорка, которую мы предполагаем name_of_variable
не содержит ничего, кроме действительного имени переменной, которое мы можем использовать: не что-то особенное.)
Ты можешь использовать declare
а также !
, как это:
John="nice guy"
programmer=John
echo ${!programmer} # echos nice guy
Второй пример:
programmer=Ines
declare $programmer="nice gal"
echo $Ines # echos nice gal
Это может работать для вас:
foo=bar
declare $foo=baz
echo $bar
baz
или это:
foo=bar
read $foo <<<"baz"
echo $bar
baz
Вы могли бы использовать eval
за это.
Пример:
$ a="bbb"
$ eval $a="ccc"
$ echo $bbb
ccc
Надеюсь это поможет!
Если вы хотите получить значение переменной вместо ее установки, вы можете сделать это
var_name1="var_name2"
var_name2=value_you_want
eval temp_var=\$$var_name1
echo "$temp_var"
Вы можете прочитать об этом здесь косвенные ссылки.
Вы можете присвоить значение переменной с помощью простого присваивания, используя значение из другой переменной, например:
#!/usr/bin/bash
#variable one
a="one"
echo "Variable a is $a"
#variable two with a's variable
b="$a"
echo "Variable b is $b"
#change a
a="two"
echo "Variable a is $a"
echo "Variable b is $b"
Результат этого таков:
Variable a is one
Variable b is one
Variable a is two
Variable b is one
Так что просто не забудьте присвоить его так, как это b="$a", и вы должны быть хорошими.