
次の例では、export
関数と同様に ed 変数がリセットされます。local
Bash、Zsh、Fishは生の値を子プロセスに渡しません。local
ローカル関数の本文にのみ影響し、元のexport
ed値を子プロセスに渡すシェルはありますか?
function the_func {
local MY_VAR="new value"
echo "=== $MY_VAR" # === prints "new value"
my -child -process # === gets MY_VAR="original"
}
export MY_VAR="original"
the_func
サブシェルと読み取り専用変数は不十分です。なぜなら、これらの変数はサブシェルの外部でも必要なからです。コマンドの引数または名前は、子プロセスとして分類できる変数に含めることができます。
答え1
- ムケシ
- .
declare +x MY_VAR=value
local +x
typeset +x
ただし、Bashでは、次の条件で失敗します。
my_func () {
local +x MY_VAR="..."
bash my.sh # ERROR in Bash: this gets "original" instead of "2nd def"
# Works in mksh: "2nd def" is passed.
}
export MY_VAR="original"
MY_VAR="2nd def" my_func
直感的に表現されています。ムケシ。