【问题标题】:Get Day Of Week in bash script在 bash 脚本中获取星期几
【发布时间】:2014-05-22 07:10:39
【问题描述】:

我想在变量DOW 中包含星期几。

所以我使用以下 bash 脚本:

DOM=$(date +%d)
DOW=($($DOM % 7) ) | sed 's/^0*//'

不幸的是,我收到了这个错误:bash: 09: command not found。变量$DOW 中的预期结果是2 ( 9 % 7 = 2)。

我怎样才能让它工作? 它适用于第 1-8 天,但由于 C-hex,没有超过 8 的可用数字,并出现以下消息:bash: 09: value too great for base (error token is "09")

【问题讨论】:

  • 不清楚你想要什么。如果是星期几,为什么从今天星期三开始会有 2 个呢?
  • 主要问题是 bash () 数学表达式解析器错误地假定以 0 为前缀的数字是八进制数,这对 1-7 来说不是问题,但对 0809 不利.请改用expr

标签: bash sed


【解决方案1】:

您也可以使用返回日期名称

 date +'%A'

【讨论】:

    【解决方案2】:

    使用%u。像这样:

    DOW=$(date +%u)
    

    来自man page

    %u 星期几 (1..7); 1 是星期一

    【讨论】:

      【解决方案3】:

      这里很好用

      #!/bin/sh
      DOW=$(date +"%a")
      echo $DOW
      

      【讨论】:

        【解决方案4】:

        使用不同的 %-说明符是您问题的真正答案。防止 bash 因无效八进制数而窒息的方法是告诉它您实际上有一个以 10 为底的数字:

        $ DOM=09
        $ echo $(( DOM % 7 ))
        bash: 09: value too great for base (error token is "09")
        $ echo $(( 10#$DOM % 7 ))
        2
        

        【讨论】:

          【解决方案5】:

          您可以使用- 标志:

          DOM=$(date +%-d)
                       ^
          

          这将防止这一天被0 填充。

          来自man date

             -      (hyphen) do not pad the field
          

          观察差异:

          $ DOM=$(date +%d)
          $ echo $((DOM % 7))
          bash: 09: value too great for base (error token is "09")
          $ DOM=$(date +%-d)
          $ echo $((DOM % 7))
          2
          

          【讨论】:

          • 以 7 为模的月份日期不是星期几!
          猜你喜欢
          • 1970-01-01
          • 2016-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-25
          相关资源
          最近更新 更多