ブール値を返すときに関数呼び出しが機能しないのはなぜですか?

ブール値を返すときに関数呼び出しが機能しないのはなぜですか?

私の関数呼び出しが以下のif条件でブール値として評価されないのはなぜですか?

関数呼び出しから返すときに数値をブール値として使用する必要がありますか?

#!/bin/bash
#Script to wait for log file to start and open it using less
function is_log_started()
{
        if test -f "log/server.log"; then
                return true
        fi
        return false
}

if [ is_log_started = true ]; then
        echo "log started"
fi

ベストアンサー1

シェル関数は0から255の整数のみを返すことができます。これは実行可能ファイルに適用されるのと同じ制限です。数値以外の引数を渡すと、他のシェルが異なる反応をします。 bash はエラーメッセージを出力します。

$ bash -c 'f () { return true; }; f; echo $?'                    
bash: line 0: return: true: numeric argument required
2

プログラムを終了するのと同様に、trueの場合は0を、falseの場合は1から125の値を渡します。 126から255の間の値も偽ですが、一般的な意味を持ちます(プログラムを開始できないか、信号によってプログラムが終了します)。

function is_log_started()
{
        if test -f "log/server.log"; then
                return 0
        fi
        return 1
}

しかし、書く方法が複雑です。

function is_log_started
{
        test -f "log/server.log"
}

シェル関数の戻り状態は、最後に実行された文の戻り状態です。

あなたのテストも間違っています。とが同じ文字列かどうかを[ is_log_started = true ]テストします。関数呼び出しの戻り状態が true かどうかをテストするには、関数を呼び出すだけです。すべてのシェルコマンドはすでにブールです。コマンドが0を返す場合はtrue、それ以外の場合はfalseis_log_startedtrue

function is_log_started
{
        test -f "log/server.log"
}
if is_log_started; then
    echo "log started"
fi

おすすめ記事