while read line循环变量输出问题
程序员文章站
2024-03-21 12:48:34
...
i=0
cat file | while read line
do
let i++
done
echo "$i"
上述程序每次输出的i都为0
在多次执行过程中发现i总是有还原成默认值的情况。
把echo "$i"放在done前每次循环都可见在累加
都过查找资料发现:while read line有2种用法
1.即上述用法
使用管道符 | 的方法相当于启动了一个独立的子进程,因此循环中的变量i是属于子进程中的,与循环外的i虽然同名,但是值却不同。
2.使用重定向 < 的方法则不会有这种现象,在脚本启动时并没有子进程出现,故i的值属于同一个bash
i=0
while read line
do
let i++
done < file
echo "$i"