Проблемы с областями видимости в разных языках оболочки?

Похоже, что 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

И Баш не может:

line 5: local: x: readonly variable

Dash и Ksh93 тоже не оправдали моих ожиданий. (Я изменился local в typeset в тесте Кш93.)

Это кажется запутанным.

ОБНОВЛЕНИЕ: я редактировал вопрос. Вопрос до этого не сформулирован четко.

1 ответ

Решение

Bash и Dash не перестают работать, если глобальная переменная не только для чтения.

Корн (ksh93) не терпит неудачу, только если ни один из случаев x только для чтения.

Другие вопросы по тегам