2011-10-10 189 views
1

我有一個do while循環在那裏我加入一個變量本身bash腳本 - 在do-while循環

while read line 
do 
     let variable=$variable+$someOtherVariable 
done 
    return $variable 

當我回聲$變量的值,我沒有得到任何輸出變量的作用域...

這是爲了增加一些價值回變量本身(即I = I + J) 此外,什麼是在這種情況下,範圍的bash腳本的背景下,正確的方法..

回答

0

的問題是該變量在範圍之外不可見(分配不會傳播出去側循環)。

,想到的第一個辦法是在子shell,並迫使循環運行命令發出變量:

variable=$(variable=0; while read line; do variable=$((variable+someOtherVariable)); done; echo $variable) 
+1

nope,它在循環範圍之外是可見的。除非你在函數內部或運行一個子外殼,否則bash中沒有範圍。 –

+1

@KarolyHorvath我討厭不同:在bash 4.2.25(1)-release(x86_64-pc-linux-gnu)中進行的一個快速實驗顯示,在'done'終止循環之後,循環內分配的變量重新獲得其先前的值。 – drevicko

+2

@drevicko:它確實*不*。你可能正在運行一個子shell。如果仍有疑問,請發帖提問。 –

1

return返回一個「退出」代碼,數量,而不是你是什麼尋找。你應該做一個echo