556 Stimmen

Rückgabewert in einer Bash-Funktion

Ich arbeite mit einem Bash-Skript und ich möchte eine Funktion ausführen, um einen Rückgabewert auszugeben:

function fun1(){
  return 34
}
function fun2(){
  local res=$(fun1)
  echo $res
}

Wenn ich fun2 ausführe, wird "34" nicht ausgegeben. Warum ist das so?

-3voto

Git Bash unter Windows verwendet Arrays für mehrere Rückgabewerte

Bash-Code:

#!/bin/bash

## Ein 6-Element-Array zur Rückgabe von Werten aus Funktionen:
declare -a RET_ARR
RET_ARR[0]="A"
RET_ARR[1]="B"
RET_ARR[2]="C"
RET_ARR[3]="D"
RET_ARR[4]="E"
RET_ARR[5]="F"

function FN_MULTIPLE_RETURN_VALUES(){

   ## Gibt den Positional-Argumenten/Eingaben
   ## $1 und $2 sinnvolle Namen:
   local out_dex_1="$1" ## Ausgabeposition
   local out_dex_2="$2" ## Ausgabeposition

   ## Ausgabe für die Fehlerbehebung:
   echo "Ausführen: FN_MULTIPLE_RETURN_VALUES"

   ## Hier: Berechnung der Ausgabewerte:
   local op_var_1="Hallo"
   local op_var_2="Welt"

   ## Setzt die Rückgabewerte:
   RET_ARR[ $out_dex_1 ]=$op_var_1
   RET_ARR[ $out_dex_2 ]=$op_var_2
}

echo "FN_MULTIPLE_RETURN_VALUES BEISPIELE:"
echo "-------------------------------------------"
fn="FN_MULTIPLE_RETURN_VALUES"
out_dex_a=0
out_dex_b=1
eval $fn $out_dex_a $out_dex_b  ## <-- Funktionsaufruf
a=${RET_ARR[0]} && echo "RET_ARR[0]: $a "
b=${RET_ARR[1]} && echo "RET_ARR[1]: $b "
echo
## ---------------------------------------------- ##
c="2"
d="3"
FN_MULTIPLE_RETURN_VALUES $c $d ## <--Funktionsaufruf
c_res=${RET_ARR[2]} && echo "RET_ARR[2]: $c_res "
d_res=${RET_ARR[3]} && echo "RET_ARR[3]: $d_res "
echo
## ---------------------------------------------- ##
FN_MULTIPLE_RETURN_VALUES 4 5  ## <--- Funktionsaufruf
e=${RET_ARR[4]} && echo "RET_ARR[4]: $e "
f=${RET_ARR[5]} && echo "RET_ARR[5]: $f "
echo
##----------------------------------------------##

read -p "Drücke Enter zum Beenden:"

Erwartete Ausgabe:

FN_MULTIPLE_RETURN_VALUES BEISPIELE:
-------------------------------------------
Ausführen: FN_MULTIPLE_RETURN_VALUES
RET_ARR[0]: Hallo
RET_ARR[1]: Welt

Ausführen: FN_MULTIPLE_RETURN_VALUES
RET_ARR[2]: Hallo
RET_ARR[3]: Welt

Ausführen: FN_MULTIPLE_RETURN_VALUES
RET_ARR[4]: Hallo
RET_ARR[5]: Welt

Drücke Enter zum Beenden:

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X