2016-10-08 9 views
0

私のオリジナルコード:バッシュスクリプト - リターンは、実際に何かを返す

# Factorial Using Recursion 

    res=1 
    fact() 
    { 
     x=$1 
     if [ $x -le 1 ] 
     then 
      echo "Actual - $res" 
      return `expr $res` 
     else  
      #echo $x 
      res=$(($res * $x)) 
      echo "($res)" 
      fact $[$x-1]         
     fi 
    } 
    fact $1 
    echo "Factorial of $1 = $?" 

$resに格納されている)結果は、私が何をしたい確かであり、また、正確です。でも何とか返ってきて$?で捕まえてしまうと間違ってしまいます。

Sample Image

+0

'return'は任意のデータを返すものではありません。 *終了ステータス*を返します。値を返すには、標準出力に書き込むか、グローバル変数に格納します。 (いいえ、 "適切な"プログラミングは 'bash'には必ずしも適用できません) – chepner

答えて

4

リターンコードの最大値が255あるので、あなたが最も整数の階乗を返すことができる方法はありません。

代わりに、関数は値を標準出力に出力する必要があります。 echoを使用してください。 result=$(fact "$x")のような関数の出力をキャプチャします。

機能の実行中に他のメッセージを出力したい場合は、echo 'whatever' >&2を使用して標準エラーに印刷できます。

res=1 
fact() 
{ 
    x=$1 
    if [ "$x" -le 1 ] 
    then 
     echo "$res" 
    else  
     res=$((res * x)) 
     fact "$((x - 1))" 
    fi 
} 

また、構文を少し修正しました。

+1

最大応答コードは255、次に256は既に0になりました – Sild

+0

@私の間違いを修正しました。 –

+0

ありがとう!私はbash:Pに新しいので、それはちょうど私と一緒にいたずらしています。 – AnoNym