2011-02-15 38 views
1

似乎pdksh和mksh具有我期望的范围实现。在不同shell语言中的范围问题?

例如:

readonly x='global' 

f() { 
    local x 
    readonly x='f' 
    echo $x 
} 

g() { 
    local x 
    readonly x='g' 
    echo $x 
} 

echo $x 

f 
g 

echo $x 

了pdksh和mksh我产生预期的结果:

global 
f 
g 
global 

和bash失败:

line 5: local: x: readonly variable 

短跑和ksh93的失败我的期望了。 (我在Ksh93的测试中将local更改为typeset)。

这看起来很混乱。

更新:我编辑了这个问题。以前的问题没有明确说明。

回答

1

如果全局变量不是只读,则Bash和Dash不会失败。

Korn(ksh93)只有在的实例x是只读时才会失败。

+1

在gnu.bash.bug邮件列表上有关于此主题的[最近讨论](http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00105.html)。 – 2011-02-18 21:59:01