在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的月日不是一周中的某一天!