39

私は関数を書きました:

check_log(){
    if [ -f "/usr/apps/appcheck.log" ]
    then
         return 1
    else
         return 0
    fi
}

次に、この関数を「if」条件で呼び出します。

if [ check_log ];
then
    ........statements....
fi

これは機能しますか?bash は成功すると 0 を返し、失敗すると 1 を返しますが、関数が返され、条件が/を1チェックしているため、ここで混乱しています。101

誰でもこの問題に光を当てることができますか?

4

2 に答える 2

70
if [ check_log ];

角括弧を使用すると、testコマンドが呼び出されます。if test check_logwhich は の省略形と同等であり、これは「ifが空の文字列でないif test -n check_log場合」を意味します。関数"check_log"はまったく呼び出されません。check_log

これを次のように変更します。

if check_log;

ちなみに、この関数は次のように簡単に記述できます。

check_log() {
    ! [ -f "/usr/apps/appcheck.log" ]
}

関数からの戻り値は最後のコマンドの終了ステータスであるため、明示的な return ステートメントは必要ありません。

于 2013-03-27T19:55:06.133 に答える