我希望变量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")
。
答案 0 :(得分:93)
答案 1 :(得分:2)
使用不同的%-specifier是您问题的真正答案。阻止bash阻塞无效八进制数的方法是告诉它你实际上有一个基数为10的数字:
$ DOM=09
$ echo $(( DOM % 7 ))
bash: 09: value too great for base (error token is "09")
$ echo $(( 10#$DOM % 7 ))
2
答案 2 :(得分:2)
在这里工作正常
#!/bin/sh
DOW=$(date +"%a")
echo $DOW
答案 3 :(得分:0)
我总是发现使用' let'是BASH最简单的解决方案。那就是:
let "DOW = DOM % 7"
答案 4 :(得分:-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