Попробуйте:
eval "`date +'@ s = (86400 - %S) - 60 * (%M + 60 * %H)'`"; echo $s
Однако обратите внимание, что в часовых поясах с зимним и летним временем он не даст правильного результата, если будет вызван в день перехода с / на летнее время, до перехода (что обычно бывает очень рано утром).
Помните, что в csh
арифметические операторы правоассоциативны , причем * /
имеют приоритет над + -
, как в
@ s = 1 - 2 + 3 - 4
это
@ s = 1 - (2 + (3 - 4))
А не:
@ s = (((1 - 2) + 3) - 4)
как в других языках. Это было исправлено в tcsh
(6.15.01), и вы можете запустить set compat_expr
, чтобы вернуться к старому поведению там.
Отсюда круглые скобки вокруг 86400 -% S
, поэтому он работает как в csh
, так и в tcsh
.