関数が返されると、プログラムは終了します。

関数が返されると、プログラムは終了します。

私のコードの一部は次のとおりです。

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

おすすめ記事