在bash脚本中获取星期几

在bash脚本中获取星期几,bash,sed,Bash,Sed,我想在变量DOW中包含星期几 因此,我使用以下bash脚本: DOM=$(date +%d) DOW=($($DOM % 7) ) | sed 's/^0*//' 不幸的是,我遇到了这个错误:bash:09:command-notfound。变量$DOW中的预期结果为2(9%7=2) 我怎样才能让它工作? 它适用于第1-8天,但由于C-hex,没有超过8的数字可用,并显示以下消息:bash:09:value对于base太大(错误标记为“09”)使用%u。像这样: DOW=$(date +%u)

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

因此,我使用以下bash脚本:

DOM=$(date +%d)
DOW=($($DOM % 7) ) | sed 's/^0*//'
不幸的是,我遇到了这个错误:
bash:09:command-notfound
。变量
$DOW
中的预期结果为2(9%7=2)

我怎样才能让它工作?
它适用于第1-8天,但由于C-hex,没有超过8的数字可用,并显示以下消息:
bash:09:value对于base太大(错误标记为“09”)
使用
%u
。像这样:

DOW=$(date +%u)
从:

%u一周中的某一天(1..7);1号星期一


您可以使用
-
标志:

DOM=$(date +%-d)
             ^
这将防止一天被
0
填充

人工日期起

   -      (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

使用不同的说明符才是问题的真正答案。防止bash被无效的八进制数阻塞的方法是告诉它您实际上有一个以10为基数的数字:

$ DOM=09
$ echo $(( DOM % 7 ))
bash: 09: value too great for base (error token is "09")
$ echo $(( 10#$DOM % 7 ))
2
这在这里很好用

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

你想要什么还不清楚。如果是一周中的某一天,那么为什么从今天到周三会有2个呢?主要问题是bash
()
数学表达式解析器错误地假设0前缀的数字是八进制的,这对1-7来说不是问题,但对
08
09
来说是不好的。请改为尝试
expr
。模7的月日不是一周中的某一天!