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: line 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));
}

除非您真的想要返回状态(其作用类似于程序退出代码),否则您可能想要“回声”而不是“返回”。

于 2012-11-19T18:19:03.660 回答
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}'; }
于 2012-11-19T18:21:04.257 回答