Cómo usar el valor de una variable como el nombre de otra variable en bash

Quiero declarar una variable, cuyo nombre proviene del valor de otra variable, y escribí el siguiente fragmento de código:

a="bbb" $a="ccc" 

pero no funcionó. ¿Cuál es la forma correcta de hacer este trabajo?

eval se usa para esto, pero si lo haces ingenuamente, habrá problemas de escape desagradables. Este tipo de cosas generalmente es seguro:

 name_of_variable=abc eval $name_of_variable="simpleword" # abc set to simpleword 

Esto rompe:

 eval $name_of_variable="word splitting occurs" 

La solución:

 eval $name_of_variable="\"word splitting occurs\"" # not anymore 

La solución definitiva: coloque el texto que desea asignar en una variable. Vamos a llamarlo una safevariable . Entonces puedes hacer esto:

 eval $name_of_variable=\$safevariable # note escaped dollar sign 

Escapar del signo de dólar resuelve todos los problemas de escape. El signo de dólar sobrevive literalmente en la función eval , que efectivamente realizará esto:

 eval 'abc=$safevariable' # dollar sign now comes to life inside eval! 

Y, por supuesto, esta tarea es inmune a todo. safevariable puede contener * , espacios, $ , etc. (La advertencia es que estamos asumiendo name_of_variable no contiene nada más que un nombre de variable válido, y uno que somos libres de usar: no es algo especial).

Puedes usar declare y ! , Me gusta esto:

 John="nice guy" programmer=John echo ${!programmer} # echos nice guy 

Segundo ejemplo:

 programmer=Ines declare $programmer="nice gal" echo $Ines # echos nice gal 

Esto podría funcionar para usted:

 foo=bar declare $foo=baz echo $bar baz 

o esto:

 foo=bar read $foo < <<"baz" echo $bar baz 

Puede hacer uso de eval para esto.
Ejemplo:

 $ a="bbb" $ eval $a="ccc" $ echo $bbb ccc 

¡Espero que esto ayude!

Si desea obtener el valor de la variable en lugar de configurarlo, puede hacerlo

 var_name1="var_name2" var_name2=value_you_want eval temp_var=\$$var_name1 echo "$temp_var" 

Puedes leer aquí referencias indirectas .

Puede asignar un valor a una variable usando la asignación simple usando un valor de otra variable como ese:

 #!/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" 

La salida de eso es esto:

 Variable a is one Variable b is one Variable a is two Variable b is one 

Así que asegúrese de asignarlo así b = “$ a” y debería estar bien.