免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3126 | 回复: 11
打印 上一主题 下一主题

关于读文件及变量的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-20 15:37 |只看该作者 |倒序浏览
os:SunOS 5.8
有如下一个文本文件t.env和shell文件t.sh
bash-2.03$ more /tmp/t.env
aaaa bbbb ccc dddd jjjj fff
1111 333
fff
hhh jj opoo jj

bash-2.03$ more t.sh
#!/bin/sh
FLAG=0
cat /tmp/t.env | while read LINE
do
        echo "$LINE"
          FLAG=2
done
echo "v==$FLAG"

执行的结果如下:
bash-2.03$ t.sh
aaaa bbbb ccc dddd jjjj fff
1111 333
fff
hhh jj opoo jj
v==0

请问为什么变量FLAG的值没有变化呢?
怎么样才可以使FLAG的值变成2呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2007-09-20 15:41 |只看该作者
while read line;do ....;done<urfile

论坛徽章:
0
3 [报告]
发表于 2007-09-20 15:47 |只看该作者
把上面的shell修改为如下
bash-2.03$ more t.sh
#!/bin/sh

FLAG=0
#cat /tmp/t.env | while read LINE
while read LINE
do
        echo "$LINE"
          FLAG=2
done  </tmp/t.env

echo "v==$FLAG"

执行结果:
bash-2.03$ t.sh
aaaa bbbb ccc dddd jjjj fff
1111 333
fff
hhh jj opoo jj

v==0

这两种方式没有区别
多谢你的回复

论坛徽章:
0
4 [报告]
发表于 2007-09-20 15:50 |只看该作者
[root@3.7.0Biz-47 /home/aaa]# vi 3
#!/bin/sh

FLAG=0
#cat /tmp/t.env | while read LINE
while read LINE
do
        echo "$LINE"
          FLAG=2
done  <21

echo "v==$FLAG"
[root@3.7.0Biz-47 /home/aaa]# ./3
string:abc
string:cdennsomethin gus
something  ett  gussss
string:fgh
1
v==2
不知道你是怎么执行的

论坛徽章:
0
5 [报告]
发表于 2007-09-20 15:57 |只看该作者
我们的代码应该没什么区别呀,
难道是操作系统有关,我的系统是SunOS 5.8,4楼你的呢?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2007-09-20 16:00 |只看该作者
原帖由 mfyproject 于 2007-9-20 15:57 发表
我们的代码应该没什么区别呀,
难道是操作系统有关,我的系统是SunOS 5.8,4楼你的呢?

情自行比较
/home/lee#echo 'abc' >file
/home/lee#cat file|while read line;do echo $line;var=ok;done;echo $var
abc

/home/lee#while read line;do echo $line;var=ok;done<file;echo $var
abc
ok
/home/lee#uname -a
Linux mylinux 2.4.20-8 #1 Thu Mar 13 17:18:24 EST 2003 i686 athlon i386 GNU/Linux
/home/lee#echo $0
-bash
/home/lee#
应该跟OS||shell有关吧

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
7 [报告]
发表于 2007-09-20 16:04 |只看该作者
#!/bin/sh
FLAG=0
exec </tmp/t.env
while read LINE
do
        echo "$LINE"
          FLAG=2
done
exec 0<&-
echo "v==$FLAG"

一些sh的bug

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2007-09-20 16:09 |只看该作者
好多小 jj 哦~

论坛徽章:
0
9 [报告]
发表于 2007-09-20 16:10 |只看该作者
7楼的利害啊,
用这种方式,完全可以实现我想要的功能。
多谢了!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2007-09-20 16:11 |只看该作者
原帖由 flw 于 2007-9-20 16:09 发表
好多小 jj 哦~

flw老大好心情~, 来这里灌水啦~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP