/ / Як створити локальну змінну лише для читання в bash? - bash, змінні, local, readonly

Як створити локальну змінну для читання в bash? - bash, змінні, локальні, тільки для читання

Як створити обидва local і declare -r (лише для читання) змінна в bash?

Якщо я:

function x {
declare -r var=val
}

Тоді я просто отримую глобальний характер var це лише для читання

Якщо я:

function x {
local var=val
}

Якщо я:

function x {
local var=val
declare -r var
}

Потім я знову отримую глобальний (я можу отримати доступ var від інших функцій).

Як поєднувати як локальний, так і лише для читання в bash?

Відповіді:

16 за відповідь № 1

Незважаючи на help local не згадує про це в Bash 3.x, local може приймати ті самі варіанти, що і declare (станом на принаймні Bash 4.3.30, цей нагляд за документацією виправлено).

Таким чином, ви можете просто зробити:

local -r var=val

Що сказав declare всередині функції за замовчуванням поводиться так само, як local, як зазначає ruakh у коментарі, тому ваша перша спроба також повинна була бути успішною у створенні місцевий змінна лише для читання.

У Bash 4.2 та новіших версіях ви можете перевизначити це с declareс -g можливість створити глобальну змінну навіть зсередини функції (Bash 3.x робить ні підтримайте це.)


0 для відповіді № 2

Якщо вам потрібен код виходу, ви можете скористатися цим підходом

function f {
local t=$(ls asdf 2>&1) c=$?; local -r t=$t;

echo "Exit code: "$c;
echo "Value: "$t;
}

f

Друк:

Exit code: 1
Value: ls: asdf: No such file or directory