私のコードの一部は次のとおりです。
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
特定の文字列に対応する関数パラメータをテストするには、Constructionを使用する必要があり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
関数名を使用できます。組み込みを呼び出すには設定をtest
使用しますbuiltin test
。
そして、=
(割り当て)と==
(比較)を記録してください。 testの内部では、演算子は[
次のように動作し(数値ではなく)文字列の同一性をテストします。]
=
==
set -o errexit
ゼロ以外の値(失敗)を返した直後にコマンドは終了します。あなたのninja
復帰1
(ゼロではない)と終了。
if
テストされていないコードは、ステートメントがコード内でコマンドを実行しようとし、コマンドの終了ステータスを決定するため、正しく機能しません。終了ステータスが0(成功)の場合、then
次のelif
コマンドが実行されますfi
。