2016-03-20 27 views
0

これはすでに議論されていますが、私はより異なる問題を抱えています。 パラメータとして[email protected]を呼び出す必要がある関数があります。関数の出力をbashの変数に代入する方法は?

もし私がvar=$(function [email protected])を置くと、私は関数が動作する行ごとにエラーを受け取るだけです。

一方私はworkaroudを使用:

  1. 私は最初の関数を呼び出し:function [email protected]
  2. をそれから私は、関数から変数に結果を保存:var=$?

でもあれば、これは単に作品関数の戻り値は "succes"または "fail"です。 考えていますか?

コード:

function() 
{ 
    if [ $1 -gt $x ] 
    then 
     return 0 
    fi 

    if [ $1 -eq $x ] 
    then 
     return 1 
    fi 

    if [ $1 -lt $x ] 
    then 
     return 2 
    fi 
} 

は私が私の変数0に格納する、このために1または2 :

menu() 
{ 
    if [ $# -gt 5 ] || [ $# -lt 1 ] 
    then 
     echo "Error! Script is: " $0 
     return 
    fi 

    echo "Insert reference number: " 
    read x 

    while [ $# -gt 0 ] 
    do 
     rez=$(function [email protected]) 

     if [ $rez -eq 0 ] 
     then 
      echo "Nr >!" $1 
     fi 

     if [ $rez -eq 1 ] 
     then 
      echo "Nr =!" $1 
     fi 

     if [ $rez -eq 2 ] 
     then 
      echo "Nr <!" $1 
     fi 
     shift 
    done 
} 
+0

実際のコードと正確な(逐語的な)出力/エラーを表示してください。 – Mat

+0

[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve)をご覧ください。 – Cyrus

+0

ブッシュ関数は、成功または失敗以外は何も返すことができません。 http://m.linuxjournal.com/content/return-values-bash-functions –

答えて

1
  1. そうしないように、たぶんelif Sを使用返される複数の値を受け取ることもできます(case文がより良い解決策になるかもしれません)。

  2. var=$(function [email protected] >/dev/null 2>&1; echo $?)私は信じていますか?

+0

私の仕事はこう言っています:... 0のための1を返します...そして2のために... ...私はただそれらのリターンを必要とします。 コードラインは何をしていますか、説明してください。 それは私の望む通りに機能します。 – Marko

+0

stdoutとstderrの両方を '/ dev/null'にリダイレクトしている間に関数を実行していますので、意図せずに関数に出力されることはありません。変数に保存される戻り値をエコーし​​ます。 –

+0

関数が何らかの形でエラーを返した場合、/ dev/nullを使用してもそれが表示されますか? – Marko

関連する問題