これはzsh -f
:
Fereidoons-MacBook-Pro% local a=$(jaja) && echo bad
zsh: command not found: jaja
bad
Fereidoons-MacBook-Pro% a=$(jaja) && echo bad
zsh: command not found: jaja
Fereidoons-MacBook-Pro%
なぜlocal
エラー処理を混乱させるのですか?
答え1
zsh
組み込み機能のマニュアルでtypeset
(これはlocal
特別な場合です):
パラメーター割り当てステートメントとは異なり、コマンド置換
typeset
に関連する割り当ての終了ステータスは、コマンド置換の終了ステータスを反映しません。したがって、コマンド置換エラーをテストするには、パラメータ宣言と初期化を分離してください。# WRONG typeset var1=$(exit 1) || echo "Trouble with var1" # RIGHT typeset var1 && var1=$(exit 1) || echo "Trouble with var1"
あなたの場合:
$ unset a
$ local a=$(jaja) && echo bad
zsh: command not found: jaja
bad
$ unset a
$ local a && a=$(jaja) && echo bad
zsh: command not found: jaja