亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么while循環后我的Bash計數器會重置

為什么while循環后我的Bash計數器會重置

斯蒂芬大帝 2020-02-01 16:55:54
我有一個Bash腳本,我想在其中計算在循環文件時完成了多少操作。計數似乎在循環內起作用,但在此之后,變量似乎已重置。nKeys=0cat afile | while read -r linedo  #...do stuff  let nKeys=nKeys+1  # this will print 1,2,..., etc as expected  echo Done entry $nKeysdone# PROBLEM: this always prints "... 0 keys"echo Finished writing $destFile, $nKeys keys上面的輸出僅是以下幾行的內容:完成輸入1完成輸入2完成寫/ blah,0鍵我想要的輸出是:完成輸入1完成輸入2完成寫/ blah,2鍵我不太確定為什么循環后nKeys為0 :(我認為這是基本的東西,但是盡管我看了http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html,但還是能認出它,但該死的和其他資源。手指交叉著別人可以看著它,然后走開,“嗯!你必須……”!
查看完整描述

3 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

在剛剛發布的Bash 4.2中,您可以執行以下操作以防止創建子外殼:


shopt -s lastpipe

另外,您可能會在Ignacio提供的鏈接中看到,您對的無用cat。


while read -r line

do

    ...

done < afile


查看完整回答
反對 回復 2020-02-01
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

如已接受的答案中所述,這是因為管道產生了單獨的子流程。為避免這種情況,command grouping一直是我的最佳選擇。也就是說,在子外殼中的管道之后進行所有操作。


nKeys=0

cat afile | 

{

  while read -r line

  do

    #...do stuff

    let nKeys=nKeys+1

    # this will print 1,2,..., etc as expected

    echo Done entry $nKeys

  done

  # PROBLEM: this always prints "... 0 keys"

  echo Finished writing $destFile, $nKeys keys

}

現在它將報告$nKeys“正確” 的值(即您希望的值)。


查看完整回答
反對 回復 2020-02-01
  • 3 回答
  • 0 關注
  • 805 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號