免费注册 查看新帖 |

Chinaunix

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

export的变量怎么带不出来? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-10-11 22:21 |只看该作者 |倒序浏览
下面的一段代码:
whether1="x"           -- 给whether1变量赋初值"x"
while read testdata    -- 循环开始
do
if [ $testdata != 0 ]  
then
whether1="y"           -- 根据条件给whether1赋值"y"
export whether1        -- export出来
else
...                    -- 否则不对whether1做赋值,使用初始的"x"
fi
done < inputfile       -- 循环结束
echo $whether1
发现whether1不管if的结果,带出来的总是"x"。不知道是什么原因,请各位大虾
给指点一下吧。谢谢了!!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-10-11 22:53 |只看该作者

export的变量怎么带不出来?

export出变量,需要用dot命令或者source命令执行脚本,即:
. urscript
source urscript

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-10-11 23:09 |只看该作者

export的变量怎么带不出来?

看起來是在同一個 script 裡, 或不是 source 的問題~~~
我倒是猜他的 if test 是否有問題?
或, 先不用 if , 直接腹值來試試:
whether1="x"
while read testdata
do
echo $testdata
whether1="y"
done < inputfile
echo $whether1

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-10-11 23:32 |只看该作者

export的变量怎么带不出来?

呵呵, netman兄言之有理

论坛徽章:
0
5 [报告]
发表于 2004-10-12 10:42 |只看该作者

export的变量怎么带不出来?

问题在于你脚本中echo $whether1的位置不对,你应该放在done前面,也就是说在循环里面,而不是done后面!

论坛徽章:
0
6 [报告]
发表于 2004-10-12 14:38 |只看该作者

export的变量怎么带不出来?

是啊,我也发现放在done里面就可以,done后面就不行,是不是这个循环体作为一个subshell去执行的?

论坛徽章:
0
7 [报告]
发表于 2004-10-12 15:08 |只看该作者

export的变量怎么带不出来?

在while的循环体内$whether1的值是随着条件的不同发生变化的,循环体并不是作为一个subshell去执行的。
在done后面循环已结束,此时$whether1的为最后一次循环对其赋的值。他当然不会再发生任何变化

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-10-12 15:11 |只看该作者

export的变量怎么带不出来?

這是我在 linux bash2 上跑的結果:
  1. [netman@study-area tmp]$ cat inputfile
  2. 15
  3. 16
  4. 17
  5. [netman@study-area tmp]$ whether1="x"
  6. [netman@study-area tmp]$ while read testdata
  7. > do
  8. > echo $testdata
  9. > whether1="y"
  10. > done < inputfile
  11. 15
  12. 16
  13. 17
  14. [netman@study-area tmp]$ echo $whether1
  15. y
复制代码


不知能否讓大家重新檢討一下自己的認知呢?

论坛徽章:
0
9 [报告]
发表于 2004-10-13 11:07 |只看该作者

export的变量怎么带不出来?

test@me> ls -l
-rwxr-xr-x   1 test      users        100 Oct 13 10:55 123
-rw-r--r--   1 test      users         11 Oct 13 10:55 filein

test@me> cat 123
whether1="x"
while read testdata
do
echo $testdata
whether1="y"
done < filein
echo $whether1

test@me> cat filein
1
2
3
4
5

test@me> ./123
1
2
3
4
5

x

用网中人的方法,我得到的答案一样如下:
test@me> whether1=x
test@me> echo $whether1
x
test@me> while read testdata
> do
> echo $testdata
> whether1="y"
> done < filein
1
2
3
4
5

test@me> echo $whether1
x
奇怪不奇怪,是shell的问题吗?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
10 [报告]
发表于 2004-10-13 12:19 |只看该作者

export的变量怎么带不出来?

子shell里的变量要想export(导出)到上一个shell,
那么执行的时候必须用dot命令(.
试比较
/home/lee/test#set|grep 123 #现在没有var的值
/home/lee/test#ksh c        #用ksh执行脚本,实际是在一个子shell中执行
/home/lee/test#set|grep 123   #没有被export出来
/home/lee/test#. ./c         #用dot命令执行呢?
/home/lee/test#set|grep 123   #变量被导出!
_=var=123
var=123      #这里滴
/home/lee/test#cat c
export var=123
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP