2012-11-19 43 views
0

我試圖創建一個轉換時間字符串,以總分鐘數,即「11:22」的函數將返回682基本bash腳本功能添加變量

str_to_min(){ 
    ARR_T=$(echo $1 | tr ":" "\n") 
    HOUR=${ARR_T[0]} 
    MINUTE=${ARR_T[1]} 
    let MIN=(60*$HOUR) 
    let MIN=($MIN+$MINUTE) 
    #echo total minutes $MIN 
    return $MIN 
} 

str_to_min "11:22" 

,但我不斷收到以下錯誤:

./find_service_to_display.sh:行5:讓:MIN =(60 * 11:錯過)' (error token is "11") ./find_service_to_display.sh: line 6: let: MIN=(11: missing)」(錯誤標記是 「11」)

+0

您是否嘗試過使用'echo'或'printf'進行調試? –

+0

它不起作用的原因是'ARR_T = $(echo $ 1 | tr「:」「\ n」)'不會創建一個數組,它會創建一個恰好在中間有換行符的字符串變量。那麼當你使用它時,在表達中間換行會導致......問題。 –

回答

1

嘗試這種情況:

str_to_min() { 
    local hours=${1%:*}; 
    local mins=${1#*:}; 
    echo $((hours * 60 + mins)); 
} 

除非您真的需要返回狀態(它像程序退出代碼一樣),否則您可能需要'echo'而不是'return'。

0
str_to_min() { echo $1 | awk -F: '{print 60*$1 + $2}'; } 

請注意,這不會返回值,而是將其打印到標準輸出。你真的不能返回值,因爲返回值必須在0-255範圍內,並且會被截斷到該範圍。這個函數總是返回零來表示成功。如果字符串格式不正確,那麼返回一個錯誤值可能是一個好主意。簡單檢查的一個想法是:

str_to_min() { echo "$1" | awk -F: '/^[0-9]+:[0-9]+$/{ print 60*$1 + $2; exit(0)} 
    {exit 1}'; }