![这个使用 date 命令的脚本中的“STRING”和“+%s”是什么意思?](https://linux22.com/image/917505/%E8%BF%99%E4%B8%AA%E4%BD%BF%E7%94%A8%20date%20%E5%91%BD%E4%BB%A4%E7%9A%84%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E2%80%9CSTRING%E2%80%9D%E5%92%8C%E2%80%9C%2B%25s%E2%80%9D%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
我有以下脚本(基于这):
#!/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 扩展。