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=""
Это то же поведение, что и у ksh (, за исключением того, что в ksh вам нужно использовать ключевое слово typeset
вместоlocal
). С другой стороны, в zsh local foo
устанавливает foo
в пустую строку.