2012-05-01 84 views
8

如何更改此var?在bash中更改變量

max=0; 
min=20000000; 
cat |while read 
do 
    read a 
    if [[ $a -gt $max ]] 
    then 
     max=a` 
    fi 
    `if [[ $a -lt $min ]] 
    then 
     min=a 
    fi 
done 
echo $max 
echo $min 

我的最小和最大值仍然是相同的,0和2000000.有人可以幫助我嗎?我不知道。

+0

對於我們這些誰錯過了你之前的問題,你能否提供更多的信息。你試圖改變什麼樣的變種? –

+3

'max = a'應該是'max = $ a',與'min = a'相同應該是'min = $ a' –

+0

如果每個值都大於20000000,那麼應該是min?我想'min'和'max'應該是你的第一個值... –

回答

13

您的腳本的(主要)問題是設置minmax發生在子外殼中,而不是主外殼。所以這些更改在管道完成後不可見。

另一個是,你打電話讀兩遍 - 這可能是打算,如果你想跳過其他每一行,但有點不尋常。

最後一個是min=a設置mina,字面意思。您想將其設置爲$a

使用process substitution擺脫第一個問題,去掉(可能是)非必要的二讀,並固定分配,你的代碼應該是這樣的:

max=0 
min=20000000 
while read a 
do 
    if [[ $a -gt $max ]] 
    then 
     max=$a 
    fi 
    if [[ $a -lt $min ]] 
    then 
     min=$a 
    fi 
done < <(cat) # careful with the syntax 
echo $max 
echo $min 

+0

ahhhh謝謝,現在我明白這一點。謝謝:) – pkruk

+1

第四個問題:在腳本中間沒有動機的反引號,初學者錯誤無法解釋。 :) –

+0

@userunknown:我認爲這些是與markdown編輯器打架的結果,不存在於代碼中:) – Mat