【问题标题】:basic bash script function adding variables添加变量的基本 bash 脚本功能
【发布时间】:2012-11-19 18:10:41
【问题描述】:

我正在尝试创建一个将时间字符串转换为总分钟数的函数,即“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”)

【问题讨论】:

  • 您是否尝试过使用echo 或printf 进行调试?
  • 它不起作用的原因是ARR_T=$(echo $1 | tr ":" "\n") 没有创建数组,它创建了一个字符串变量,中间恰好有一个换行符。然后当你使用它时,在表达式中间有一个换行符会导致......问题。

标签: bash function variables math scripting


【解决方案1】:

试试这个:

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

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

【讨论】:

    【解决方案2】:
    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}'; }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-23
      • 1970-01-01
      • 2017-11-12
      相关资源
      最近更新 更多