Bash ローカル変数の初期化

Bash ローカル変数の初期化

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文字列です。

関連情報