bash的迴圈中無法儲存變數

2022-04-01 21:19:55 字數 672 閱讀 7878

在bash中,如果迴圈在乙個子shell中執行,那麼在迴圈中對迴圈外面的變數的更改將在迴圈退出後不可見。像下面的例子:

#!/bin/sh

var=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/sh

var=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求值,解...