当前位置:  技术问答>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...

本帖最后由 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
}

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遵守了这一规则

还是尽量避免这种用法吧,使用不同的变量名称就行了

|

这俩都是类unix系统,差异应该不大吧

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • popen()里的command是个脚本,里面定义了function,在运行时,报错sh:"}"非期望的.看popen帮助,它execl不一定就用ksh,如何设环境是她能用ksh
  • 这句ksh谁能解释清楚,算你NB,呵呵
  • 3个简单的ksh问题,请解答,谢谢
  • 求助ksh读写一个文件
  • 我装了RED HAT 7.2 SHELL是BASH,我想改用KSH,我改怎么作才行~!!
  • 这是什么问题?ksh: syntax error: `(' unexpected
  • 怎么让system调用使用ksh?
  • AIX 的交换分区叫什么名字? 怎么把用户从KSH设置为CSh?
  • forfiles如何转换成ksh脚本
  • ksh 中求前一天的日期
  • 用service for unix,ksh,怎么执行.profile呢
  • ksh怎么取得文件的大小
  • ksh
  • 关于#!/bin/ksh中的#!
  • ksh下执行.sh脚本问题
  • 在ksh下脚本遇见的一点问题
  • ksh 里面加 connect /as sysdba;
  • ksh中捕获ssh返回值和输出重定向
  • unix shell编程(Ksh) 文件内容分离,求教,谢谢


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3