Як створити обидва 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