Création d’un nom de variable de chaîne à partir de la valeur d’une autre chaîne

Dans mon script bash, j’ai deux variables CONFIG_OPTION et CONFIG_VALUE qui contiennent respectivement la chaîne VENDOR_NAME et Default_Vendor .

Je dois créer une variable VENDOR_NAME $CONFIG_OPTION c’est-à-dire VENDOR_NAME et atsortingbuer la valeur dans CONFIG_VALUE à la variable nouvellement créée.

Comment puis-je faire ceci?

j’ai essayé

 $CONFIG_OPTION=$CONFIG_VALUE 

Mais je reçois une erreur sur cette ligne comme

 './Build.bash: line 137: VENDOR_NAME="Default_Vendor": command not found' 

Merci.

Je sais que personne ne le mentionnera, alors je pars. Vous pouvez utiliser printf !

 #!/bin/bash CONFIG_OPTION="VENDOR_NAME" CONFIG_VALUE="Default_Vendor" printf -v $CONFIG_OPTION "$CONFIG_VALUE" # Don't believe me? echo "$VENDOR_NAME" 

Terminé!

Incidemment, c’est une méthode plutôt rapide (aussi rapide que la méthode declare ).

Ceci utilise les bases de Bash:

 #!/bin/bash VAR1="VAR2" declare "${VAR1}"="value" echo "VAR1=${VAR1}" echo "VAR2=${VAR2}" 

Le script de sortie:

 VAR1=VAR2 VAR2=value 

Voici l’extrait de code utilisant vos noms de variables:

 #!/bin/bash CONFIG_OPTION="VENDOR_NAME" declare "${CONFIG_OPTION}"="value" echo "CONFIG_OPTION=${CONFIG_OPTION}" echo "VENDOR_NAME=${VENDOR_NAME}" 

Le script de sortie:

 CONFIG_OPTION=VENDOR_NAME VENDOR_NAME=value 

Pour un shell pur, essayez éventuellement:

 #!/usr/bin/env sh option=vendor_name value="my vendor" eval $option="'$value'" # be careful with ', \n, and \ in value eval echo "\$$option" # my vendor echo "$vendor_name" # my vendor 

Pourquoi?

 #!/usr/bin/env sh printf -v "var" "val" # prints the flag, var not set declare var=val # sh: declare: not found echo ${!var} # sh: syntax error: bad substitution 

Je n’aime pas eval, mais y a-t-il des options POSIX?