不同shell语言中的范围问题?

时间:2011-02-15 15:51:03

标签: bash shell ksh

看来pdksh和mksh具有我期望的范围实现。

例如:

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

Dash和Ksh93也失败了。 (我在Ksh93的测试中将local更改为typeset。)

这似乎令人困惑。

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

1 个答案:

答案 0 :(得分:1)

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

仅当x的实例的 none 为只读时,Korn(ksh93)才会失败。