最近我想用 Bash 中的一行代码来计算两个日期之间的时差(以天为单位)。所以我想使用以下命令
echo $((($(date +%s --date "2018-01-08")-$(date +%s --date "1999-12-28"))/(3600*24))) days
结果为“6586 天”。
由于笨拙,我忘记在第一个日期条目中输入结束的引号:[ date +%s --date "2018-01-08 ]
我得到了这个输出:
echo $((($(date +%s --date "2018-01-08)-$(date +%s --date "1999-12-28"))/(3600*24))) days
bash: command substitution: Zeile 4: Dateiende beim Suchen nach »"« erreicht.
bash: command substitution: Zeile 5: Syntaxfehler: Unerwartetes Dateiende.
> ^C
rosika@rosika-10159:~$ echo $?
130
我认为错误消息很清楚,但我没有得到命令提示符。系统似乎在等待某事。但我不清楚在等什么。
我最终输入了“CTRL+C”,这样我就得到了命令提示符。我希望我做了正确的事。
错误代码为“130”。好吧,我很清楚它不可能是“0”。
我想了解的是:系统可能在等待什么?
也许你们中一些知识渊博的人可以对此事作出一些解释?
提前致谢。
问候。Rosika
附言:
我的系统:Linux/Lubuntu 20.04.2 LTS,64 位
答案1
shell 正在等待结束的双引号和两次结束的))
。
$ echo $((($(date +%s --date "2018-01-08)-$(date +%s --date "1999-12-28"))/(3600*24))) days" )) ))
date: invalid date ‘2018-01-08)-946335600)/(3600*24))) days’
bash: () : syntax error: operand expected (error token is ") ")
$ echo $?
1
答案2
您的命令包含语法错误:第二次日期调用时缺少双引号:
--date "2018-01-08
user@host:~$ echo $((($(date +%s --date "2018-01-08")-$(date +%s --date "1999-12-28"))/(3600*24))) days
6586 days