Как использовать значение переменной как другое имя переменной в bash
Я хочу объявить переменную, имя которой cmoes из значения другой переменной, и я написал следующий фрагмент кода:
a="bbb"
$a="ccc"
но это не сработало. Какой правильный способ выполнить эту работу?
Ответы
Ответ 1
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
, содержит только действительное имя переменной и одно из них, которое мы можем использовать: не что-то особенное.)
Ответ 2
Вы можете использовать declare
и !
, например:
John="nice guy"
programmer=John
echo ${!programmer} # echos nice guy
Второй пример:
programmer=Ines
declare $programmer="nice gal"
echo $Ines # echos nice gal
Ответ 3
Это может сработать для вас:
foo=bar
declare $foo=baz
echo $bar
baz
или это:
foo=bar
read $foo <<<"baz"
echo $bar
baz
Ответ 4
Вы можете использовать eval
для этого.
Пример:
$ a="bbb"
$ eval $a="ccc"
$ echo $bbb
ccc
Надеюсь, это поможет!
Ответ 5
Если вы хотите получить значение переменной вместо ее установки, вы можете сделать это
var_name1="var_name2"
var_name2=value_you_want
eval temp_var=\$$var_name1
echo "$temp_var"
Вы можете прочитать об этом здесь косвенные ссылки.
Ответ 6
Вы можете присвоить значение переменной с помощью простого присваивания, используя значение из другой переменной:
#!/usr/bin/bash
#variable one
a="one"
echo "Variable a is $a"
#variable two with a 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", и вам должно быть хорошо.