[英]Bash variable resets in for loop (no pipe)
我已經將代碼精簡為這個簡單的for循環。 我不明白為什么計數器tot_add不是一直累加而是1:
cd /path/to/my/workspace;
tot_add=0;
for d in ./*/;
do (cd "$d";
let tot_add=tot_add+1;
echo $tot_add;
) done
預期結果:
1
2
3
實際結果
1
1
1
我已經閱讀了有關Pipe子殼的答案。
BASH常見問題解答條目24:“我在循環中設置了變量。為什么循環終止后它們突然消失?或者,為什么我不能通過管道傳輸要讀取的數據?”
但是,我在這里不使用豎線字符。
()
產生一個subshell。
因此,它實際上是添加到子shell中的,當子shell退出時,父shell沒有結果,而是從0
開始,因此您總是得到1。
若要解決此問題,請擺脫子外殼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.