2012-03-15 33 views

Respuesta

-2

Se puede asignar un valor a una variable mediante una simple asignación utilizando un valor de otra variable, así:

#!/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 ello es la siguiente:

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

Así que asegúrese de asígnelo de esta manera b = "$ a" y debería estar bien.

+0

La cuestión es cómo indirecta sobre los nombres de variables calculadas, ahora cómo asignar expresiones variables fijas. – Kaz

9

Puede hacer uso de eval para esto.
Ejemplo:

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

Espero que esto ayude!

41

eval se usa para esto, pero si lo haces ingenuamente, habrá problemas de escapes desagradables. Este tipo de cosas es generalmente 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 final: poner el texto que desea asignar a una variable. Vamos a llamarlo safevariable. Luego puede hacer esto:

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

Al escapar del signo de dólar, se resuelven todos los problemas de escape. El signo del dólar sobrevive pie de la letra en la función de eval, que llevará a cabo con eficacia esta:

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

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

12

Esto podría funcionar para que:

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

o esto:

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

correcto, mejor para usar declare sobre eval (razones de seguridad) –

+0

@ meso_2600 declare no se comporta de la misma manera que la asignación, porque cambiará el alcance de la variable a la local (no podrá modificar una variable desde un ámbito principal con declarar, a menos que lo declare como una variable global). – niieani

+0

su segunda respuesta es excelente. ninguna subescala generó. aclamaciones. –

3

Si desea obtener el valor de la variable en lugar de establecer que usted puede hacer esto

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

Puedes leer sobre esto aquí indirect references.

25

Puede utilizar declare y !, así:

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

Segundo ejemplo:

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

Hola Flimm. ¿Es posible con arreglos? Algo como 'echo '$ {! Array [1]}' '? – leaf

Cuestiones relacionadas