Valeur de retour dans une fonction Bash

Je travaille avec un script bash et je veux exécuter une fonction pour imprimer une valeur de retour :

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

Lorsque j'exécute fun2, il n'imprime pas "34&quot ;. Pourquoi est-ce le cas ?

Solution

Bien que bash ait une instruction return, la seule chose que vous pouvez spécifier avec elle est le statut exit de la fonction elle-même (une valeur entre 0 et 255, 0 signifiant "succès&quot ;). Donc return n'est pas ce que vous voulez.

Vous pourriez vouloir convertir votre instruction return en instruction echo - de cette façon, la sortie de votre fonction pourrait être capturée en utilisant des accolades $(), ce qui semble être exactement ce que vous voulez.

Voici un exemple :

function fun1(){
  echo 34
}

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

Une autre façon d'obtenir la valeur de retour (si vous voulez juste retourner un entier de 0 à 255) est $?.

function fun1(){
  return 34
}

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

Notez également que vous pouvez utiliser la valeur de retour pour utiliser la logique booléenne comme fun1 || fun2 qui ne lancera fun2 que si fun1 retourne une valeur 0. La valeur de retour par défaut est la valeur de sortie de la dernière instruction exécutée dans la fonction.

Commentaires (12)

$(...) capture le texte envoyé à stdout par la commande qu'il contient. return n'envoie pas de texte vers stdout. $? contient le code de résultat de la dernière commande.

fun1 (){
  return 34
}

fun2 (){
  fun1
  local res=$?
  echo $res
}
Commentaires (2)

L'instruction return définit le code de sortie de la fonction, de la même manière que exit le fera pour le script entier.

Le code de sortie de la dernière commande est toujours disponible dans la variable $?.


function fun1(){
  return 34
}

function fun2(){
  local res=$(fun1)
  echo $? # 
Commentaires (0)