关于命令行语法的问题

关于命令行语法的问题

最近我想用 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

相关内容