Bashでローカル変数を初期化する方法は?次のコマンドが実行されますいつも同じことをします(関数内で使用するとき)?
local foo
local foo=
local foo=""
答え1
local foo=""
まったく同じですlocal foo=
。どちらの場合も、等号の右側は空の文字列です。
local foo
とはlocal foo=
異なります。未設定local foo
のままfoo
、空の文字列にlocal foo=
設定されます。foo
より正確にはlocal foo
ローカル変数が生成され、最初は設定が解除されます。後続の割り当てはfoo=…
ローカル値を設定し、割り当てはlocal
このステートメントと組み合わせることができます。証人:
bash-4.3$ demo () {
local unset empty=
echo "unset=\"${unset-(not set)}\" empty=\"${empty-(not set)}\""
}
bash-4.3$ demo
unset="(not set)" empty=""
typeset
これはkshと同じように機能します(kshでは代わりにキーワードを使用する必要がありますlocal
)。一方、zshではlocal foo
設定は空のfoo
文字列です。