29589


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

[code]

    #!/bin/bash
    
    func1()  {
        v=$(false)
        echo $?
    }
    
    func2() {
        local v=$(false)
        echo $?
    }
    
    func1
    func2
    
[/code]

実行結果

[code]

    1
    0
    
[/code]

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

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


CC BY-SA 3.0
2016-10-15T13:46:58.617
29587
2016-10-15T14:20:47.307
2016-10-15T13:54:46.603
754
754
question
bash
local な変数に command substitute するときに exit code を判別したい


原因は、`local`もコマンドだからですね。

というわけで。

[code]

    func3() {
        local v
        v=$(false)
        echo $?
    }
    
[/code]


CC BY-SA 3.0
2016-10-15T14:20:47.307
29589
2016-10-15T14:20:47.307
4010
29587
answer