shell while循环内的变量在循环外部值不能传递解决办法
发布时间:2011-06-27 19:15:57 文章来源:www.iduyao.cn 采编人员:星星草
shell while循环内的变量在循环外部值不能传递
例如
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
------解决方案--------------------
1.应该不会存在这种问题
2.建议在脚本前加上set -x,看循环是否执行
3.echo "i="i 有问题
------解决方案--------------------
i=0
while read line cd
do
i=100
done
echo $i
输出肯定是100
要注意就是当你要使用变量的时候一定要带上$符号
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
solaris 10下的多线程和solaris 5.8下多线程编译有什么区别??
我一个在solaris 10下编译通过且能正常运行的程序,为什么在solaris 5....
-
提示 read-only file system
从网上下载了一个vmware 镜相文件,用root 登陆,但用vi, mkdir 总是提示 read-only file system
这...
-
ftp的20、21端口
如果一台机器1可以ftp到另一台机器2,则需要开通机器1到机器2的20和21端口,我在机器1上用“telnet 机器1的IP 21”...
-
Solaris10如何重启inetd服务
问题描述:SunOS(Solaris 10) Unix系统下有一个具有sudo权限的非root用户修改了/etc/services文件,请问...
-
求solaris下的类似linux的top命令,谢谢!
rt
------解决方案--------------------
你可以使用prstat或者去下载包含top命令的软件包...
-
(急!)如何在UNIX中配置Microsoft SQL Server 2000 Driver for JDBC?
UNIX环境中已设置环境变量(在.bash_profile中设置,执行:echo $CLA...
-
Solaris 压缩问题
Solaris 我打了一个tar包,它的大小有6.5G,然后我用zip去压缩的时候发现不能成功,好像zip不能压缩超过2G的文件,请问...
-
急急急unix下的Xterm指的是什么?
急急急unix下的Xterm指的是什么?在哪里可以找到这个东东?原话是这样的:“do same as above with: an...
-
solaris下面,如何看支持mount哪些类型的文件系统
mount命令本身有这样的功能么?
------解决方案--------------------
没有 一...
-
请教各位高手,有没有命令是用来查看文件格式的 unix dos
查看某个文件是unix格式还是dos格式,能用vi命令来看,但是好像不能用程序来...