这个使用 date 命令的脚本中的“STRING”和“+%s”是什么意思?

这个使用 date 命令的脚本中的“STRING”和“+%s”是什么意思?

我有以下脚本(基于):

#!/bin/bash

runtime=$(zenity --title "Send notification repeatedly" --entry "Enter the period in minutes like this: nn minutes")

endtime=$(date -ud "$runtime" +%s)

while [[ $(date -u +%s) -le $endtime ]]
do
    notify-send "Hello"
    sleep 10s
done

man date有这个:

   -d, --date=STRING
          display time described by STRING, not 'now'

但我找不到“STRING”的解释。

在 zenity 窗口中输入以下所有内容:

  • 1 minute
  • 1 minutes
  • 1 min

1 m事实并非如此。哪里可以找到“STRING”这样的可接受内容?我在 中找不到任何内容man date

另一件事是 的用途+%s。它起什么作用?

答案1

您可以在下方找到它man date

日期字符串

--date=STRING 一个大部分格式自由、人性化且可读的日期字符串,例如"Sun, 29 Feb 2004 16:21:42 -0800""2004-02-29 16:21:42"甚至"next Thursday"
日期字符串可能包含表示日历日期、一天中的时间、时区、星期几、相对时间、相对日期和数字的项目。空字符串表示一天的开始。日期字符串格式比这里记录的要复杂得多,但在信息文档中有完整描述

要了解哪些是允许的,哪些是不允许的,你可以阅读信息文档

因此,运行info date并切换到“日期输入格式”。


关于+%s请参阅概要:

date [OPTION]... [+FORMAT]

FORMAT 有很多可能的序列,所以这里只列出您需要的序列:

%s     seconds since 1970-01-01 00:00:00 UTC

+只是语法的一部分。


此外,还有一些值得一读的内容: 如何获取有关终端命令的帮助?

答案2

手册页中说明了一切:

日期字符串

--date=STRING是一种大多数格式自由、人性化且易于阅读的日期字符串,例如“Sun, 29 Feb 2004 16:21:42 -0800”或“2004-02-29 16:21:42”甚至“下周四”。日期字符串可能包含表示日历日期、一天中的时间、时区、星期几、相对时间、相对日期和数字的项目。空字符串表示一天的开始。日期字符串格式比此处记录的要复杂,但在信息文档中有完整描述。

这里给出的例子:

例子

将纪元 (1970-01-01 UTC) 以来的秒数转换为日期

$ date --date='@2147483647'

显示美国西海岸的时间(使用 tzselect(1) 查找 TZ)

$ TZ='America/Los_Angeles' date

显示下周五上午 9 点美国西海岸的当地时间

$ date --date='TZ="America/Los_Angeles" 09:00 next Fri'

你还会发现手册页在互联网上

答案3

info '(coreutils) date invocation':

程序接受以下选项。另请参阅*note 常用选项::。

'-d DATESTR' '--date=DATESTR' 显示 DATESTR 中指定的日期和时间,而不是当前日期和时间。DATESTR 几乎可以采用任何常见格式。它可以包含月份名称、时区、“am”和“pm”、“yesterday”等。例如,'--date="2004-02-27 14:19:13.489392193 +0530"' 指定 2004 年 2 月 27 日下午 2:19:13 后 489,392,193 纳秒的时间,时区为 UTC 以东 5 小时 30 分钟。注意:当前输入必须采用与语言环境无关的格式。例如,需要下面的 LC_TIME=C 才能在许多语言环境中打印回正确的日期:date -d "$(LC_TIME=C date)"

+

如果给定一个以“+”开头的参数,“date”将按照该参数定义的格式打印当前日期和时间(或“--date”选项指定的日期和时间,见下文),这与“strftime”函数的格式类似。除了以“%”开头的转换说明符外,格式字符串中的字符将保持不变。转换说明符如下所述。

%s

与时间相关的“日期”转换说明符。...

自纪元以来的“%s”秒数,即自 1970-01-01 00:00:00 UTC 以来的秒数。除非有闰秒支持,否则不计算闰秒。*请注意 %s-examples::,作为示例。这是一个 GNU 扩展。

相关内容