2015-11-29 1 views
-1

J'ai déjà vu cette question auparavant, mais je n'arrive pas à la comprendre.Utilisation de la valeur de variable comme nom de variable dans bash

J'ai cette variable que je reçois de l'entrée utilisateur read column_number

puis je me joins avec le préfixe « col » pour former le nom de ma variable

selected_column="col"$column_number 

Mais lorsque je tente de évaluer pour obtenir le résultat, je continue à obtenir la (standard_in) 1: erreur de syntaxe

sum=$(round $sum+"echo ${!selected_column}", 2) 

full code:

Répondre

2
column_number=5 
selected_column=col$column_number 
col5=42 
sum=17 
echo $(($sum+${!selected_column})) 

Sortie: {!} Selected_column

 
59 

sum=$(round $(($sum+${!selected_column})) 2) 
+0

S'il vous plaît pouvez-vous donner une explication de '$' Est-ce la fonction d'extension de l'histoire que nous utilisons ici? – sjsam

+2

@sjsam 'man bash' puis'/indirection' – gboffi

+0

@sjsam: De 'man bash':" * Si le premier caractère du paramètre est un point d'exclamation (!), Un niveau d'indirection de variable est introduit. de la variable formée à partir du reste du paramètre comme nom de la variable, cette variable est ensuite étendue et cette valeur est utilisée dans le reste de la substitution, plutôt que la valeur du paramètre lui-même (extension ). * " – Cyrus