쉘 스크립트에서 타임스탬프 문구와 함께 gnu 날짜를 사용하여 날짜 계산을 수행하려고 하는데 차이점을 설명할 수 없습니다. 누군가 나를 깨달을 수 있습니까? 이것은 버그입니까?
% date -u -d "now"
Fri Aug 2 15:07:16 UTC 2013
% date -u -d "1970-01-01 00:00:00 UTC + `date +%s` seconds"
Fri Aug 2 15:07:29 UTC 2013
% date -u -d "now -6 months -1 day"
Fri Feb 1 15:07:52 UTC 2013
% date -u -d "1970-01-01 00:00:00 UTC + `date +%s` seconds -6 months -1 day"
Tue Jan 29 15:08:03 UTC 2013
%s는 맨페이지에 "1970-01-01 00:00:00 UTC 이후의 초 수"로 정의되어 있으므로 마지막 항목이 이전 항목과 정확히 같은 의미일 것으로 예상했습니다.
답변1
작업 순서가 잘못된 것 같습니다. 이 명령을 실행하면 제대로 작동합니다.
$ date -u -d "$(date -u -d "1970-01-01 00:00:00 UTC + `date +%s` seconds") \
-6 months -1 day"
이것을 실행하면 이상한 결과가 나타납니다.
$ date -u -d "$(date +%s) seconds -6 months -1 day"
Sun Sep 3 07:48:54 UTC 2056
그러나 $(date +%s) seconds
괄호로 보호하면 문제가 해결되는 것 같습니다.
$ date -u -d "($(date +%s) seconds) -6 months -1 day"
Fri Feb 1 15:55:12 UTC 2013