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"
本文探讨了Shell脚本中while read命令的两种用法及其对变量i的作用域影响。通过对比管道符|和重定向<的使用,解析了变量在子进程与主进程中不同的行为表现。
4216

被折叠的 条评论
为什么被折叠?



