当前位置: 技术问答>linux和unix
ksh和bash 函数变量作用域的问题
来源: 互联网 发布时间:2016-12-10
本文导语: 本帖最后由 hzgdiyer 于 2011-06-29 15:56:33 编辑 OS: suse11 文件:new.ksh 内容如下: ================== #!/bin/bash a() { typeset tmp=$1 tmp="changed" } b() { typeset tmp="wangjing" echo $tmp a "${tmp}" echo $tmp...
文件:new.ksh 内容如下:
==================
#!/bin/bash
a()
{
typeset tmp=$1
tmp="changed"
}
b()
{
typeset tmp="wangjing"
echo $tmp
a "${tmp}"
echo $tmp
}
set -x
b
==================
运行结果:
svr002:/tmp/test1 # ./new.ksh
+ b
+ typeset tmp=wangjing
+ echo wangjing
wangjing
+ a wangjing
+ typeset tmp=wangjing
+ tmp=changed
+ echo wangjing
wangjing
=====================================================================
大家可以看到函数b的tmp没有在函数a中被修改,
现在修改new.ksh如下:
=============
#!/bin/ksh
a()
{
typeset tmp=$1
tmp="changed"
}
b()
{
typeset tmp="wangjing"
echo $tmp
a "${tmp}"
echo $tmp
}
set -x
b
=============
运行结果:
svr002:/tmp/test1 # ./new.ksh
+ b
+ tmp=wangjing
+ typeset tmp
+ echo wangjing
wangjing
+ a wangjing
+ tmp=wangjing
+ typeset tmp
+ tmp=changed
+ echo changed
changed
==================
大家可以看到函数b的tmp已经在函数a中被修改;
大家来讨论一下.....................
|
看来 shell 的行为与操作系统及shell自身版本有关
|
在AIX平台试验了一下,带有typeset 的ksh版本,函数b中的tmp并不受函数a的影响
那就是说,typeset 在函数中定义一个局部变量
但是suse11 环境下的ksh没有按照这一规则
而HP/AIX环境下的ksh遵守了这一规则
还是尽量避免这种用法吧,使用不同的变量名称就行了
那就是说,typeset 在函数中定义一个局部变量
但是suse11 环境下的ksh没有按照这一规则
而HP/AIX环境下的ksh遵守了这一规则
还是尽量避免这种用法吧,使用不同的变量名称就行了
|
这俩都是类unix系统,差异应该不大吧
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。