在bash中,如果迴圈在乙個子shell中執行,那麼在迴圈中對迴圈外面的變數的更改將在迴圈退出後不可見。像下面的例子:
#!/bin/shvar=1
python run.py | while
read line
doecho $line
var=var+1
let
"var=var+1
"done
echo $
var
最後面的echo輸出的var仍然是1。原因是while迴圈位於管道中,這意味著在執行過程中,while迴圈實際是位於乙個新的shell中的,while迴圈中的var變數和檔案開頭定義的var變數是兩個不同的變數,所以while迴圈中所改變的值在while迴圈結束後無法儲存下來。
解決方法是消除子shell,下面是其中乙個簡單的解法:
#!/bin/shvar=1
python run.py > a.out
while
read line
doecho $line
var=var+1
let
"var=var+1
"done
< a.out
echo $
varrm -f a.out
bash 迴圈中變數作用範圍的問題分析
先來看一段錯誤的 複製 如下 bin bash for x in ls cat x do echo x while read line doc echo line awk f echo c i i c done echo done echo i 以上 有什麼問題呢?cat之後的管道會使i的值沒有被加...
for迴圈中的變數作用域
for語句的語法如下 for expression1 expression2 expression3 statement expression1為初始化部分,它在迴圈裡只在開始時執行一次 expression2為條件部分,它在迴圈中每次都被執行。expression3 為調整部分,它在迴圈體每次執行...
for 迴圈中的 i 變數取值問題
1 如何點選某乙個 li 的時候 alert 輸出其index?window.onload function 解析 因為在for迴圈裡面指定給olis i onclick的事件處理程式,也就是onclick那個匿名函式是在for迴圈執行完成後 使用者點選時 才被呼叫的。而呼叫時,需要對變數i求值,解...