zsh:ジョブで一貫性のないエラー処理

zsh:ジョブで一貫性のないエラー処理

これは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

関連情報