Ystk(ヨシタカ)が気になった事や日々の記録をメモするためのブログです。

Bash

Bash の local 宣言で注意すべきこと

投稿日:

Bash 内の関数に local を追加したあと、不都合が発生して少しハマりました。

関数の終了ステータスが必ず成功(0)になる

# 必ずエラーの終了ステータスを返す
function failure() {
    echo "failure 関数は絶対エラーだよ"
    return 1
}

function hoge() {
    local log=$(failure)
    local exit_status=$?

    echo "$log"
    echo "終了ステータスは「${exit_status}」"
}

hoge

上記のコードの期待値は下の様になりますが、実際の終了ステータスは「0」になります。

failure 関数は絶対エラーだよ
終了ステータスは「1」

終了ステータスを使用する場合は注意

local 宣言の後に、終了ステータスを使用して何かを行う場合は、以下のようにする必要があります。

function hoge() {
    local log=""
    log=$(failure)
    local exit_status=$?

    echo "$log"
    echo "終了ステータスは「${exit_status}」"
}

これは if で使用する [] と同じで、 local というコマンドを実行していることになり、 local の後に $? で終了ステータスを取得すると、それは local に対する終了ステータスとなります。
なので、一度初期化(または宣言)することで回避出来ます。

あとがき

考えれば「そりゃそーだな」って思いますが、Bash では普通のプログラミング言語と違って単純なことで躓くことが多い気がする。

-Bash

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

関連記事はありませんでした