小编Col*_*202的帖子

如何防止Linux上的ksh用局部变量覆盖全局变量?

我参与了将包含几个ksh脚本的系统从AIX 6.1移植到SUSE-Linux的过程.我在ksh在两个系统上的行为方式遇到了以下不同之处:

# LocalVar.sh 

test_loc_var()
{ 
typeset -t var 
var=localvariable 
echo "var = $var" 
} 

typeset var=globalvariable 

echo "var = $var" 
test_loc_var 
echo "var = $var"
Run Code Online (Sandbox Code Playgroud)

AIX上的正确结果是:

var = globalvariable 
var = localvariable 
var = globalvariable 
Run Code Online (Sandbox Code Playgroud)

Linux上的错误结果是:

var = globalvariable 
var = localvariable 
var = localvariable 
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 是否有一个环境变量,我可以设置为让Linux的ksh在AIX上表现得像?失败了:
  • Linux的ksh上有选项可以获得所需的行为吗?失败了:
  • 我需要对代码进行哪些更改才能在Linux上获得所需的行为?

注意:

  • 我已经尝试用"local"声明变量,但是在Linux上返回了一个错误,在AIX上它可以工作.

下表总结了这两个系统:

uname -s                 |    Linux                    AIX        
uname -r                 |    2.6.16.60-0.54.5-smp     1
which ksh                |    /bin/ksh                 /usr/bin/ksh
rpm -qa | grep -i ksh    |    ksh-93s-59.11.35         -
lslpp -l | …
Run Code Online (Sandbox Code Playgroud)

linux aix ksh

7
推荐指数
1
解决办法
1016
查看次数

标签 统计

aix ×1

ksh ×1

linux ×1