Как я могу ограничить область видимости переменной только для чтения функцией? - PullRequest
1 голос
/ 22 мая 2019

Я определяю функции в скрипте с readonly local переменными следующим образом:

test.sh

function test_function() {
    readonly local foo="bar"
}

Перед поиском foo, конечно, не определено

$> echo $foo

$>

Но тогда, когда я получаю и запускаю функцию

$> source test.sh
$> test_function
$> echo $foo
bar
$>

внезапно переменная вышла за пределы своей области видимости. Удаление readonly решает проблему. Что я не так понимаю по поводу использования readonly и local и можно ли использовать оба без этой проблемы?

Случай использования: я получаю ошибки / предупреждения при многократном вызове test_function, поскольку переменная должна быть доступна только для чтения, но уже определена.

1 Ответ

3 голосов
/ 22 мая 2019

Заменить:

readonly local foo="bar"

на:

local -r foo="bar"

Проблема в том, что readonly local foo="bar" определяет две переменные только для чтения: одна с именем local и однаназванный foo.Он не создает никаких локальных переменных.

В отличие от этого local -r foo="bar" создает переменную с именем foo, которая одновременно local и только для чтения.

Как указывает David C Rankin , после создания глобальной переменной только для чтения ее нельзя отменить.Вам нужно закрыть существующую оболочку и запустить новую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...