Creazione di un nome di variabile stringa dal valore di un’altra stringa

Nel mio script bash ho due variabili CONFIG_OPTION e CONFIG_VALUE che contengono rispettivamente la stringa VENDOR_NAME e Default_Vendor .

Devo creare una variabile con nome $CONFIG_OPTION cioè VENDOR_NAME e assegnare il valore in CONFIG_VALUE alla variabile appena creata.

Come posso farlo?

Provai

 $CONFIG_OPTION=$CONFIG_VALUE 

Ma sto ottenendo un errore su questa linea come

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

Grazie.

So che nessuno ne parlerà, quindi eccomi qui. Puoi usare printf !

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

Fatto!

Per inciso, è un metodo piuttosto veloce (veloce come il metodo declare ).

Questo usa i builtin di bash:

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

L’output dello script:

 VAR1=VAR2 VAR2=value 

Ecco lo snippet che utilizza i nomi delle variabili:

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

L’output dello script:

 CONFIG_OPTION=VENDOR_NAME VENDOR_NAME=value 

Per la shell pura, possibilmente provare:

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

Perché?

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

Non mi piace l’eval, ma ci sono delle opzioni POSIX?