免费注册 查看新帖 |

Chinaunix

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

求救 shell 全局变量设置无效 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-03 14:39 |只看该作者 |倒序浏览
脚本a.sh

#!/bin/sh
returnValue=""

function test()
{
        returnValue=231
}


function a()
{
        test
        echo "$returnValue"

}

a

执行完后的结果如下:会成功取到reurntValue 的值
# sh -x ./a.sh
+ returnValue=
+ a
+ test
+ returnValue=231
+ echo a
a
+ return 1
+ echo 1
1
+ echo 'reurntValue = 231'
reurntValue = 231

但如果把a.sh中的方法a() 中调用test方法写成`test`
却取不到reurntValue 的值

function a()
{
        local id=`test`
        echo "$returnValue"

}

执行结果如下:
sh -x ./a.sh
+ returnValue=
+ a
++ test
++ returnValue=231
++ echo a
++ return 1
+ local id=a
+ echo 0
0
+ echo 'reurntValue = '
reurntValue =

论坛徽章:
0
2 [报告]
发表于 2012-02-03 14:40 |只看该作者
在线等啊!各位高手

论坛徽章:
0
3 [报告]
发表于 2012-02-04 14:42 |只看该作者
本帖最后由 ri0day 于 2012-02-04 15:22 编辑

你应该在 test函数里显式输出那个变量
function test()
{
        returnValue=231
        echo $returnValue
}
因为你这样赋值等于是把test函数执行结果的输出赋值给id这个变量。没有输出是取不到值的。

论坛徽章:
0
4 [报告]
发表于 2012-02-05 04:13 |只看该作者
函数内部定义的变量,除了函数就不能使用的

论坛徽章:
0
5 [报告]
发表于 2012-02-05 23:03 |只看该作者
本帖最后由 yuanfaxiang1008 于 2012-02-07 11:34 编辑

当你执行id=`test`的时候,命令替换会产生一个subshell,在subshell中设置的变量不会影响当前父shell环境,所以无法输出变量

论坛徽章:
0
6 [报告]
发表于 2012-02-09 16:30 |只看该作者
回复 3# ri0day

用echo 输出是可以,但不是我需要,我的本意是在此方法中设置此全局变量的值,而不是作为返回值输出。
不过也谢谢哦


   

论坛徽章:
0
7 [报告]
发表于 2012-02-09 16:31 |只看该作者
回复 5# yuanfaxiang1008


    明白了,thank you very much.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP