Programmende bei Rückkehr in eine Funktion

Programmende bei Rückkehr in eine Funktion

Dies ist ein Auszug meines Codes:

ninja ()
{
  if $1 = toto
  then
  return 1
  elif $1 = tata
  then
  return 4
  fi
}

main () {
  ninja "tata"
  if [ $? -ne 1 ]
  then
    somecode
  fi
}

main "$@"

Wenn meine Funktion etwas zurückgibt, wird das Programm ohne Grund einfach beendet (ich habe es mit einem Trap EXIT getestet), die Funktion gibt 4 zurück und führt den Trap aus.

Bearbeiten: funktioniert, wenn ich kommentiere

set -o errexit
set -o errtrace

Aber wie kann ich den Fehler finden?

Antwort1

Wenn Sie testen möchten, ob das Funktionsargument einem String entspricht, müssen Sie „construct“ verwenden. if [ "$x" == "string" ]Ihr Code sieht dann folgendermaßen aus:

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 "$@"

Und Sie könnten testden Namen für die Funktion verwenden. Wenn Sie „builtin“ aufrufen möchten test, verwenden Sie builtin test„construct“.

Und achten Sie auf =(Zuweisung) und ==(Vergleich). Innerhalb des Tests funktioniert der [Operator wie und prüft die Gleichheit der Zeichenfolgen (nicht der Zahlen).]===

set -o errexitwird sofort beendet, nachdem der Befehl einen Wert ungleich Null (nicht erfolgreich) zurückgibt. Sie ninjageben einen 1Wert ungleich Null zurück und beenden das Programm.

Ihr Code funktioniert ohne Tests nicht, da ifdie Anweisung versucht, darin Anweisungen auszuführen und den Beendigungsstatus des Befehls zu bestimmen: Wenn der Beendigungsstatus Null (Erfolg) ist, führen Sie die Anweisungen nach thenbis elifaus fi.

verwandte Informationen