Как использовать значение переменной в качестве имени другой переменной в 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", и вы должны быть хорошими.

Другие вопросы по тегам