2010-03-24 25 views
0

Disons que je donne les résultats suivants:Comment changer la valeur de la valeur dans BASH?

Vegetable=Potato (Kind of vegetable that i have) 
Potato=3 (quantity available) 

Si je veux savoir combien de légumes je (à partir d'un script où j'ai accès uniquement à la variable Vegetable), je ferais ce qui suit:

Quantity=${!Vegetable} 

Mais disons que je prends un Potato alors je veux mettre à jour la quantité, je devrais pouvoir faire ce qui suit:

${Vegetable}=$(expr ${!Vegetable} - 1) 

Cependant, cela ne fonctionne pas. Quelqu'un pourrait-il expliquer pourquoi?

Répondre

2
eval ${Vegetable}=$(expr ${!Vegetable} - 1) 
0

avec bash 4.0, vous pouvez utiliser des tableaux associatifs

declare -A VEGETABLE 
VEGETABLE["Potato"]=3 
VEGETABLE["Potato"]=$((VEGETABLE["Potato"]-1)) 
echo ${VEGETABLE["Potato"]} 
2

Essayez:

declare $Vegetable=$((${!Vegetable} - 1)) 

Vous n'avez pas besoin d'utiliser expr, par la voie. Comme vous pouvez le voir, Bash peut gérer l'arithmétique entière.

Voir this page pour plus d'information sur la redirection dans Bash.

+0

Ah, merci! 'eval' est un hack dans cette situation. –

Questions connexes