2011-02-15 27 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