Ich arbeite mit einem Bash-Skript und möchte eine Funktion ausführen, um einen Rückgabewert zu drucken:
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Wenn ich fun2
ausführe, druckt es nicht "34". Warum ist dies der Fall?
Obwohl die Bash eine "Return"-Anweisung hat, ist das Einzige, was man damit angeben kann, der eigene "Exit"-Status der Funktion (ein Wert zwischen "0" und "255", wobei 0 "Erfolg" bedeutet). Also ist return
nicht das, was Sie wollen.
Vielleicht möchten Sie Ihre return
-Anweisung in eine echo
-Anweisung umwandeln - auf diese Weise könnte Ihre Funktionsausgabe mit $()
-Klammern erfasst werden, was genau das zu sein scheint, was Sie wollen.
Hier ist ein Beispiel:
function fun1(){
echo 34
}
function fun2(){
local res=$(fun1)
echo $res
}
Eine andere Möglichkeit, den Rückgabewert zu erhalten (wenn Sie nur eine ganze Zahl von 0-255 zurückgeben wollen), ist $?
.
function fun1(){
return 34
}
function fun2(){
fun1
local res=$?
echo $res
}
Beachten Sie auch, dass Sie den Rückgabewert verwenden können, um boolesche Logik zu verwenden, wie z.B. fun1 || fun2
führt nur fun2
aus, wenn fun1
einen 0
Wert zurückgibt. Der Standardrückgabewert ist der Exit-Wert der letzten innerhalb der Funktion ausgeführten Anweisung.
$(...)fängt den Text ein, der von dem darin enthaltenen Befehl an stdout gesendet wird.
returngibt nicht auf stdout aus.
$?` enthält den Ergebniscode des letzten Befehls.
fun1 (){
return 34
}
fun2 (){
fun1
local res=$?
echo $res
}
Die return
-Anweisung setzt den Exit-Code der Funktion, ähnlich wie exit
für das gesamte Skript.
Der Exit-Code für den letzten Befehl ist immer in der Variable "$?`" verfügbar.
function fun1(){
return 34
}
function fun2(){
local res=$(fun1)
echo $? # <-- Always echos 0 since the 'local' command passes.
res=$(fun1)
echo $? #<-- Outputs 34
}