2016-03-25 13 views
2

における変数としてループの結果を得るために、私は次のようなループがあります。もちろんストアbashの

for time in ${seconds_list}; do 
    echo "scale=2; (${cur_time}-${time})/3600" | bc 
done 

は、私は、ファイルに結果を「エコー」可能性があり、それを使って行うことが、私は考えますより洗練されたアプローチは、すべてのforループの結果を後で使用できる1つの変数に格納することです。

var='30.25 
16.15 
64.40 
29.80' 

私はこれを達成することができますする簡単な方法があります: すべての結果を含む変数は、このような何かを見ているのでしょうか?

+1

このデータで何をやっているのですか?根本的な問題を解決するのではなく、ソリューションを実装するのに役立つように思えます。それはこれを[XY問題](http://mywiki.wooledge.org/XyProblem)にします。確かに、提案している方法でこれを行うことができます。または他の方法。しかし、最良の選択はあなたの質問にはない(まだ(まだ)(http://stackoverflow.com/posts/36223802/edit))詳細に依存します。 – ghoti

答えて

7

それは本当に簡単です、あなただけ(変数にループ全体の出力をリダイレクトすることができます):

VARIABLE=$(for time in ...; do ...; done) 

あなたの例:ちょうど$()にコードを囲む

var=$(for time in ${seconds_list}; do 
      echo "scale=2; (${cur_time}-${time})/3600" | bc 
     done) 

+0

ありがとう!私はそれを考えなかったと信じられない! – Andy

4

あなたの結果を格納するBASH配列を使用することをお勧め:あなたが述べたようにただ一つの変数を使用したい場合は

results=() 

for time in ${seconds_list}; do 
    results+=($(bc -l <<< "scale=2; ($cur_time-$time)/3600")) 
done 

# print the results: 

printf "%s\n" "${results[@]}"