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