0

時間文字列を合計分に変換する関数を作成しようとしています。つまり、「11:22」は 682 を返します。

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行目: let: MIN=(60*11: missing )' (error token is "11") ./find_service_to_display.sh: line 6: let: MIN=(11: missing)' (エラートークンは「11」)

4

2 に答える 2

1

これを試して:

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

戻りステータス (プログラムの終了コードのように機能する) が本当に必要でない限り、おそらく「return」ではなく「echo」が必要です。

于 2012-11-19T18:19:03.660 に答える
0
str_to_min() { echo $1 | awk -F: '{print 60*$1 + $2}'; }

これは値を返さないが、stdoutに出力することに注意してください。戻り値は0〜255の範囲である必要があり、その範囲に切り捨てられるため、実際には値を返すことはできません。代わりに、この関数は成功を示すために常にゼロを返します。文字列が正しい形式でない場合は、エラー値を返すことをお勧めします。簡単なチェックの1つのアイデアは次のとおりです。

str_to_min() { echo "$1" | awk -F: '/^[0-9]+:[0-9]+$/{ print 60*$1 + $2; exit(0)} 
    {exit 1}'; }
于 2012-11-19T18:21:04.257 に答える