2010-03-24 58 views
0

比方說,我有以下幾點:如何更改BASH中的值?

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

如果我想知道我有多少的蔬菜有(從腳本,我只有可變Vegetable訪問),我會做到以下幾點:

Quantity=${!Vegetable} 

但是,讓我們說,我拿一個Potato然後我想更新數量,我應該能夠做到以下幾點:

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

但是,這不起作用。有人可以解釋爲什麼。

回答

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

使用bash 4.0,您可以利用關聯數組

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

嘗試:

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

你並不需要使用expr,順便說一句。如你所見,Bash可以處理整數運算。

請參閱this page瞭解有關Bash中間接定位的更多信息。

+0

啊,謝謝! 'eval'在這種情況下是一種破解。 – 2010-03-25 06:10:09