bash的循环中无法保存变量
2016-11-09 00:44
288 查看
在bash中,如果循环在一个子shell中运行,那么在循环中对循环外面的变量的更改将在循环退出后不可见。像下面的例子:
最后面的echo输出的var仍然是1。原因是while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的var变量和文件开头定义的var变量是两个不同的变量,所以while循环中所改变的值在while循环结束后无法保存下来。
解决方法是消除子shell,下面是其中一个简单的解法:
#!/bin/sh var=1 python run.py | while read line do echo $line var=var+1 let "var=var+1" done echo $var
最后面的echo输出的var仍然是1。原因是while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的var变量和文件开头定义的var变量是两个不同的变量,所以while循环中所改变的值在while循环结束后无法保存下来。
解决方法是消除子shell,下面是其中一个简单的解法:
#!/bin/sh var=1 python run.py > a.out while read line do echo $line var=var+1 let "var=var+1" done < a.out echo $var rm -f a.out
相关文章推荐
- Bash shell,while 循环中的变量无法保存问题
- Bash 外部变量在循环内改变无法传递到循环外
- crontab与bash环境变量不一致导致的无法定时执行任务~
- bash 脚本编程七 将命令输出保存到变量中
- 变量 'F' 无法保存到 7.3 以前版本的 MAT 文件
- Shell变量while循环内改变无法传递到循环外
- Shell编程中使用管道循环中无法改变外部变量的解决办法
- bash如何读文本并保存到变量
- bash 学习一 变量、参数、判断与循环
- linux笔记 第六天 bash编程入门之变量、条件判断、条件测试和for循环等
- 使用ctr+c无法终止一个bash脚本,此脚本在循环执行一个需要运行一定时间的命令
- u-boot无法保存环境变量的问题 error:end address not on sector boundary
- u-boot无法保存环境变量的问题 error:end address not on sector boundary
- 为何bash中一条命令的输出保存到变量之后换行符变成了空格
- 微软BI 之SSIS 系列 - 2008 版本中变量 Int64 无法保存 bigint 类型数据的BUG
- matlab怎样循环保存一系列的规律变量
- bash 循环中变量作用范围的问题分析
- 从键盘输入一组非0整数,以输入0为结束标志,求这组整数的平均值,并统计其中正数和负数的个数。(根据循环变量的初值、终值无法判断出循环次数时建议使用while或do while语句完成)。
- 解决javascript的var变量无法保存el表达式中session域对象的值的的问题
- Linux学习命令汇总四——Bash中变量.文件通配符.管道与重定向.算术运算及循环或判断语句