Как использовать значение переменной как имя другой переменной в bash

Я хочу объявить переменную, имя которой исходит от значения другой переменной, и я написал следующий fragment кода:

a="bbb" $a="ccc" 

но это не сработало. Каков правильный способ выполнить эту работу?

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 о том, что мы предполагаем, что 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”, и вам должно быть хорошо.

  • Проверка успеха команды в команде bash `if `
  • Пересечение массива в bash
  • Передача параметров функции Bash
  • Удалить фиксированный префикс / суффикс из строки в Bash
  • Как применить команду оболочки к каждой строке вывода команды?
  • Использование: - (двоеточие в столбце) в bash
  • Как я могу запросить пользователя для подтверждения в сценарии bash?
  • Bash расширяет переменную переменной
  • Цитирование в алфавитном порядке в Bash
  • Объяснение оператора двоеточия в:: $ {foo = value}
  • Могут ли выражения расширения параметра $ {var} быть вложенными в bash?
  • Давайте будем гением компьютера.