Проблемы с областями видимости в разных языках оболочки?
Похоже, что 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
только для чтения.