当前位置: 技术问答>linux和unix
shell while循环内的变量在循环外部值不能传递
来源: 互联网 发布时间:2016-11-06
本文导语: 例如 i=0 while read line cd do i=100 done echo "i="i #现在程序运行后这里i=的输出为0 而不是100. 如何才能让它输出100呢? 请问怎么把while内部的变量传递到循环外部?如何从子SHELL传到外部呢?该如何...
例如
i=0
while read line cd
do
i=100
done
echo "i="i #现在程序运行后这里i=的输出为0 而不是100. 如何才能让它输出100呢?
请问怎么把while内部的变量传递到循环外部?如何从子SHELL传到外部呢?该如何改呢?请提示出代码。
i=0
while read line cd
do
i=100
done
echo "i="i #现在程序运行后这里i=的输出为0 而不是100. 如何才能让它输出100呢?
请问怎么把while内部的变量传递到循环外部?如何从子SHELL传到外部呢?该如何改呢?请提示出代码。
|
子Shell是不能传到父Shell的, 这是因为子进程是在独立的进程空间(Context)运行了. 需要跟父进程通信的话, 得使用进程间通信机制. 不是简单的变量问题.
|
可以传递的嘛。
例子:
#!/bin/sh
i=0
echo "before while:i=$i"
while [[ $i -lt 10 ]]
do
echo "in while:i=$i"
let i=$i+1
done
echo "after while:i=$i"
运行结果如下:
before while:i=0
in while:i=0
in while:i=1
in while:i=2
in while:i=3
in while:i=4
in while:i=5
in while:i=6
in while:i=7
in while:i=8
in while:i=9
after while:i=10
例子:
#!/bin/sh
i=0
echo "before while:i=$i"
while [[ $i -lt 10 ]]
do
echo "in while:i=$i"
let i=$i+1
done
echo "after while:i=$i"
运行结果如下:
before while:i=0
in while:i=0
in while:i=1
in while:i=2
in while:i=3
in while:i=4
in while:i=5
in while:i=6
in while:i=7
in while:i=8
in while:i=9
after while:i=10
|
1.应该不会存在这种问题
2.建议在脚本前加上set -x,看循环是否执行
3.echo "i="i 有问题
2.建议在脚本前加上set -x,看循环是否执行
3.echo "i="i 有问题
|
i=0
while read line cd
do
i=100
done
echo $i
输出肯定是100
要注意就是当你要使用变量的时候一定要带上$符号
while read line cd
do
i=100
done
echo $i
输出肯定是100
要注意就是当你要使用变量的时候一定要带上$符号