Просто скористайтеся date
надійними секундами:
Як ви справедливо зазначаєте, багато деталей про основні обчислення приховано, якщо ви покладаєтесь на англійську арифметику часу. Наприклад -d yesterday
, і -d 1 day ago
матиме різну поведінку.
Натомість, ви можете надійно залежати від (точно задокументованих) секунд з моменту епохи unix UTC та арифметики bash, щоб отримати потрібний момент:
date -d @$(( $(date +"%s") - 24*3600)) +"%Y-%m-%d"
Це було зазначено в іншій відповіді . Ця форма є більш портативною на платформах з різними date
прапорцями командного рядка, не залежить від мови (наприклад, "вчора" проти "hier" у французькій мові), і відверто (в довгостроковій перспективі) буде легше запам'ятовуватися, адже добре, ви знайте це вже. Ви інакше можете запитати себе: "Це було -d 2 hours ago
чи -d 2 hour ago
знову?" або "Це -d yesterday
чи -d 1 day ago
це я хочу?"). Єдиний складний біт тут @
.
Озброєний башем і більше нічого:
Bash виключно на bash, ви також можете отримати вчорашній час через printf вбудований:
%(datefmt)T
causes printf to output the date-time string resulting from using
datefmt as a format string for strftime(3). The corresponding argu‐
ment is an integer representing the number of seconds since the
epoch. Two special argument values may be used: -1 represents the
current time, and -2 represents the time the shell was invoked.
If no argument is specified, conversion behaves as if -1 had
been given.
This is an exception to the usual printf behavior.
Так,
# inner printf gets you the current unix time in seconds
# outer printf spits it out according to the format
printf "%(%Y-%m-%d)T\n" $(( $(printf "%(%s)T" -1) - 24*3600 ))
або, що еквівалентно, з тимчасовою змінною (зовнішня підзарядка необов'язкова, але підтримує чистоту середовища).
(
now=$(printf "%(%s)T" -1);
printf "%(%Y-%m-%d)T\n" $((now - 24*3600));
)
Примітка: незважаючи на тематичну сторінку, яка стверджує, що жоден аргумент для %()T
форматера не буде вважати за замовчуванням -1
, я, здається, отримав 0 замість цього (дякую, інструкція bash версія 4.3.48)