【求助】i值始终为0,哪里出现了问题?

SUSE Linux系统下,有如下脚本

--------------------------------------------------------------------------------

#!/bin/sh

i=0

echo "1" > t.txt

echo "2" >> t.txt

cat t.txt | while read line

do

    i=$(($i+1))

    echo "i=$i"

done

echo "final i=$i"

--------------------------------------------------------------------------------
运行结果始终如下:


i=1

i=2

final i=0


即最终的i值始终为0,哪里出现了问题?

作者: w61655   发布时间: 2011-06-03

  1. #!/bin/sh
  2. i=0
  3. echo "1" > t.txt
  4. echo "2" >> t.txt
  5. while read line
  6. do
  7.     i=$(($i+1))
  8.     echo "i=$i"
  9. done < t.txt
  10. echo "final i=$i"

  11. 注:| 后面的是sub shell
复制代码

作者: springwind426   发布时间: 2011-06-03



QUOTE:
springwind426 发表于 2011-06-03 14:44



学习了

作者: sosolitude   发布时间: 2011-06-03

回复 w61655


    如果你非要用管道的话可以让echo "final i=$i"也在子进程中
  1. cat t.txt | { while read line
  2. do
  3.     i=$(($i+1))
  4.     echo "i=$i"
  5. done
  6. echo "final i=$i"  }
复制代码

作者: shplpy   发布时间: 2011-06-03

管道产生子一个sub shell,父shell中的变量,在sub shell中无效

作者: beyondfly   发布时间: 2011-06-03