2017-05-04 1 views
2

Je souhaite passer un argument à une fonction et renvoyer une valeur calculée pour qu'elle soit stockée en vue d'un traitement ultérieur. Voici l'exemple de code.Renvoi d'une fonction dans un script shell

#!/bin/bash 

test() 
{ 
    echo $1 

    c=$(expr $1 + "10000") 

    return $c 
} 

var=$(test 10) 

echo $var 

Je voudrais obtenir la valeur de c stockée dans var. Quelqu'un peut-il s'il vous plaît aider dans ce cas.

+2

Malgré le mot "chaîne" dans le doublon proposé ci-dessus, il ne doit pas strictement être une chaîne. Le fait est que vous pouvez uniquement _return_ un octet non signé (0-255) à partir d'une fonction shell. – kojiro

Répondre

2

La "valeur de retour" d'une fonction telle que vous l'avez utilisée est stdout. "return" définira le statut de sortie ($?), Pour lequel vous n'avez probablement pas besoin. "test" est probablement un mauvais choix de nom, car il est pris (QV man test). Alors :

$ Test() { expr $1 + 10000; } 
$ var=$(Test 10) 
$ echo $var 
10010 
+0

Merci :) Son fonctionnement ... Je n'utiliserai pas de test comme nom de fonction. C'était juste un échantillon, mais mon erreur de nommer. merci beaucoup :) – Praveen

2

si tout ce que vous voulez faire est d'ajouter 10000 à votre entrée, puis une fonction est surpuissant. pour cela, wouldnt ce travail?

your_arg=10 
var=$((${your_arg}+10000)) 
echo $var 
+0

Pour un exemple j'ai collé ce code simple. J'utilise une autre fonction qui convertit le temps (HH: MM) en secondes et cela est appelé plusieurs fois. – Praveen

0

Il y a quelques problèmes dans votre code.

#!/bin/bash 

Il fonctionne, mais il est pas une bonne idée de définir une fonction appelée test, parce que test is a standard Unix program.

test() 
{ 

écrire la sortie de débogage d'erreur standard (& 2) au lieu de la sortie standard (& 1). La sortie standard est utilisée pour renvoyer des données.

echo "$1" >&2 

fonctions variables Déclarez avec local pour éviter les effets secondaires.

local c=$(expr "$1" + "10000") 

Utilisation echo au lieu de return pour retourner des chaînes. return peut renvoyer uniquement des entiers.

echo "$c" 
} 

var=$(test 10) 

En cas de doute, toujours citer des arguments.

echo "$var" >&2