
これは私のコードの抜粋です:
ninja ()
{
if $1 = toto
then
return 1
elif $1 = tata
then
return 4
fi
}
main () {
ninja "tata"
if [ $? -ne 1 ]
then
somecode
fi
}
main "$@"
理由もなく、関数が何かを返すと、プログラムは終了し (トラップ EXIT でテストしました)、関数は 4 を返してトラップを実行します。
編集:コメントすると機能します
set -o errexit
set -o errtrace
しかし、どうすればエラーを見つけられるのでしょうか?
答え1
関数の引数が何らかの文字列と同等であることをテストしたい場合は、construct を使用する必要がありますif [ "$x" == "string" ]
。コードは次のようになります。
test () {
if [ "$1" == "toto" ] then
return 1
elif [ "$1" == "tata" ] then
return 4
fi
}
main () {
test "tata"
if [ $? -ne 1 ] then
echo "somecode"
fi
}
main "$@"
test
また、関数には name を使用できます。builtin を呼び出す場合はtest
、builtin test
construct を使用します。
=
また、 (代入)と(比較)に注意してください==
。テスト内では[
、]
演算子=
は のように動作し==
、文字列の等価性をテストします(数値ではありません)。
set -o errexit
コマンドがゼロ以外 (成功ではない) を返すとすぐに終了します。ninja
を返し1
(ゼロ以外)、終了します。
テストのないコードは動作しません。原因if
ステートメントは、命令を実行してコマンドの終了状態を判別しようとします。終了状態がゼロ (成功) の場合は、 まで命令を実行しthen
ますelif
。fi