bash の local 変数へ command substitution の結果を代入するときに、コマンドが失敗する場合を考慮しようとしたときに、以下の挙動の違いに気がつきました。

#!/bin/bash

func1()  {
    v=$(false)
    echo $?
}

func2() {
    local v=$(false)
    echo $?
}

func1
func2

実行結果

1
0

local 変数へバインドするときには、 exit code が何であっても正常終了している様子です。これを、異常終了を検知するうまい方法はないでしょうか。(うまい、の定義が曖昧ならば、一般的にこのようなことをやりたくなった場合の対処方法が何になるのか、が知りたいです。)

普通に考えると、一旦普通の変数へ bind すればいいですが、そもそも関数の中に変数代入の影響範囲を閉じ込めたいから local を使っているのであって、だとすると普通の変数へ bind した途端に local を使う意味が、よくわからなくなってしまいます。