Bash shell,while 循环中的变量无法保存问题
2013-10-22 16:51
316 查看
问题SHELL举例:
#!/bin/sh
Counter=0
ls /opt/src/ | while read LINE
do
let "Counter=Counter+1"
done
echo $Counter
该SHELL用于计算/opt/src/中有多少文件,但实际运行中无论/opt/src/下有多少文件,最后输出都是0。
经查,造成这个问题的原因是while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的Counter变量和文件开头定义的Counter变量是两个不同的变量,所以while循环中所改变的值在while循环结束后无法保存下来。
解决办法:
#!/bin/sh
Counter=0
ls /opt/src/ > /tmp/t1.txt
while read LINE
do
let "Counter=Counter+1"
done < t1.txt
rm /tmp/t1.txt -f
echo $Counter
#!/bin/sh
Counter=0
ls /opt/src/ | while read LINE
do
let "Counter=Counter+1"
done
echo $Counter
该SHELL用于计算/opt/src/中有多少文件,但实际运行中无论/opt/src/下有多少文件,最后输出都是0。
经查,造成这个问题的原因是while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的Counter变量和文件开头定义的Counter变量是两个不同的变量,所以while循环中所改变的值在while循环结束后无法保存下来。
解决办法:
#!/bin/sh
Counter=0
ls /opt/src/ > /tmp/t1.txt
while read LINE
do
let "Counter=Counter+1"
done < t1.txt
rm /tmp/t1.txt -f
echo $Counter
相关文章推荐
- 解决javascript的var变量无法保存el表达式中session域对象的值的的问题
- u-boot无法保存环境变量的问题 error:end address not on sector boundary
- Shell变量while循环内改变无法传递到循环外
- keil中for循环变量递减,无法跳出循环的问题
- u-boot2012无法保存环境变量的问题
- 管道下while循环中定义的变量在退出while循环时引用为空的问题
- u-boot无法保存环境变量的问题 error:end address not on sector boundary
- bash的循环中无法保存变量
- 从键盘输入一组非0整数,以输入0为结束标志,求这组整数的平均值,并统计其中正数和负数的个数。(根据循环变量的初值、终值无法判断出循环次数时建议使用while或do while语句完成)。
- while(scanf(“%d%d”,&a,&b)!=EOF)循环无法退出问题
- while read 中使用 ssh 免密执行命令 无法循环的问题
- matlab怎样循环保存一系列的规律变量
- InfoPath Error “此文档库已经被重命名或删除,或者网络问题导致文件无法保存…” 的解决方案
- 无法给变量添加属性导致出问题
- 怎样解决Myeclipse提示编码错误无法保存的问题
- 解决”在root用户下可以echo 环境变量但是在普通用户下无法echo“问题
- 解决C++中误输入导致while结构死循环的问题
- 并行编程之多线程共享非volatile变量,会不会可能导致线程while死循环
- oracle的文件编辑器问题: SP2-0110: 无法创建保存文件 "afiedt.buf"
- 用for循环或while循环来解决百钱买百鸡问题