linux
  • bash
  • for-loop
  • 2016-03-25 100 views 2 likes 
    2

    我有類似下面這樣的循環:商店for循環的結果作爲一個變量在bash

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

    當然,我可以「回聲」結果到一個文件,並用它做,但我認爲一個更優雅的方法是將所有for循環結果存儲在一個變量中,以便以後使用。 包含所有結果的變量必須是這個樣子:

    var='30.25 
    16.15 
    64.40 
    29.80' 
    

    有沒有一種簡單的方法中,我能做到這一點?

    +1

    你對這些數據做了什麼?這聽起來像你正試圖幫助我們實施你的解決方案,而不是解決你的根本問題。這使得這是[XY問題](http://mywiki.wooledge.org/XyProblem)。當然,你可以按照你的建議來這樣做。或者其他方式。但是最好的選擇取決於你的問題中沒有的細節[[yet](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[@]}" 
    
    相關問題