Ich möchte den Wert von einer Funktion zurückgeben, die in einem Shell-Skript aufgerufen wird. Vielleicht fehlt mir die Syntax. Ich habe versucht, die globalen Variablen zu verwenden. Das funktioniert aber auch nicht. Der Code lautet:
lockdir="somedir"
test() {
retval=""
if mkdir "$lockdir"
then # Directory did not exist, but it was created successfully
echo >&2 "successfully acquired lock: $lockdir"
retval="true"
else
echo >&2 "cannot acquire lock, giving up on $lockdir"
retval="false"
fi
return retval
}
retval=test()
if [ "$retval" == "true" ]
then
echo "directory not created"
else
echo "directory already created"
fi
shell
return-value
Mridul Vishal
quelle
quelle
Antworten:
Eine Bash-Funktion kann einen String nicht direkt so zurückgeben, wie Sie es möchten. Sie können drei Dinge tun:
Dies gilt auch für einige andere Muscheln.
So führen Sie jede dieser Optionen aus:
1. Echo Saiten
2. Geben Sie den Exit-Status zurück
3. Variable teilen
quelle
function
Schlüsselwort, um eine Bash-Funktion zu definieren. Das würde es weniger tragbar machen. Entfernen Sie es.Sie arbeiten viel zu hart. Ihr gesamtes Skript sollte sein:
aber auch das ist wohl zu ausführlich. Ich würde es codieren:
Die resultierende Fehlermeldung ist jedoch etwas unklar.
quelle
mkdir "$lockdir" || { echo "could not create lock dir" >&2 ; exit 1 ; }
(Beachten Sie die;
vor der schließenden geschweiften Klammer). Außerdem definiere ich häufig eine Fehlerfunktion, die einen optionalen Nachrichtenparameter verwendet, der an stderr gedruckt und dann mit dem Rückkehrcode 1 beendet wird, sodass ich den besser lesbaren verwenden kannmkdir "$lockdir" || fail "could not create lock dir"
.cmd || fail "error msg" || return 1
wenn Sie das möchten, oder?fail
Funktion, die nur für tödliche Situationen verwendet wird.Wenn es sich nur um einen Richtig / Falsch-Test handelt, haben Sie Ihre Funktion
return 0
für Erfolg undreturn 1
Misserfolg. Der Test wäre dann:quelle
Ich denke, 0 für Succ / 1 für Fail (Glenn Jackman) zurückzugeben und Olibres klare und erklärende Antwort sagt alles; Nur um eine Art "Combo" -Ansatz für Fälle zu erwähnen, in denen die Ergebnisse nicht binär sind und Sie lieber eine Variable festlegen möchten, als ein Ergebnis "wiederzugeben" (wenn Ihre Funktion beispielsweise AUCH etwas wiedergibt, wird dieser Ansatz dies tun nicht arbeiten). Was dann? (unten ist Bourne Shell)
wie in (yep, das Beispiel ist etwas albern, es ist nur ein .. Beispiel)
quelle
Falls Sie einige Parameter an eine Funktion übergeben müssen und einen Wert zurückgeben möchten. Hier übergebe ich "12345" als Argument an eine Funktion und nach Verarbeitung der zurückgegebenen Variablen XYZ, die VALUE zugewiesen wird
Ausgabe:
quelle