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 ?
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 ?
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).
Vous pouvez utiliser eval
pour ça.
Exemple :
$ a="bbb"
$ eval $a="ccc"
$ echo $bbb
ccc
J'espère que cela vous aidera !
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 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.