48 votes

Comment utiliser la valeur d'une variable comme nom d'une autre variable en bash ?

Je veux déclarer une variable dont le nom provient de la valeur d'une autre variable, et j'ai écrit le morceau de code suivant :

a="bbb"
$a="ccc"

mais ça n'a pas marché. Quelle est la bonne façon de faire ce travail ?

66voto

Kaz Points 18072

eval est utilisé pour cela, mais si vous le faites naïvement, il y aura de méchants problèmes d'échappement. Ce genre de choses est généralement sans danger :

name_of_variable=abc

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

Cette pause :

eval $name_of_variable="word splitting occurs"

La solution :

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

La solution ultime : mettez le texte que vous voulez assigner dans une variable. Appelons-le safevariable . Alors vous pouvez faire ça :

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

S'échapper du signe du dollar résout tous les problèmes d'évasion. Le symbole du dollar survit textuellement dans le fichier eval qui s'en chargera efficacement :

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

Et bien sûr, cette mission est immunisée contre tout. safevariable peut contenir * des espaces, $ etc. (La mise en garde étant que nous supposons que name_of_variable ne contient rien d'autre qu'un nom de variable valide, et que nous sommes libres d'utiliser : pas quelque chose de spécial).

54voto

Flimm Points 8870

Vous pouvez utiliser declare y ! comme ceci :

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

Deuxième exemple :

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

19voto

potong Points 18653

Cela pourrait marcher pour vous :

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

ou ceci :

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

9voto

Vous pouvez utiliser eval pour ça.
Exemple :

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

J'espère que cela vous aidera !

4voto

bat_ventzi Points 196

Si vous voulez obtenir la valeur de la variable au lieu de la définir, vous pouvez faire ceci

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

Vous pouvez le lire ici références indirectes .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X