该date
命令输出当前日期和时间,如下所示:Fri Apr 12 15:04:03 UTC 2013
。
要以自定义格式输出日期时间,我们可以使用date +FORMAT
,例如,如下所示:date "+%Y-%m-%dT%H:%M:%S%:z"
给出类似 的内容2013-04-12T15:04:37+00:00
。
但我想知道,,,,,,等等统称为什么%Y
(%m
即术语)%d
。另外,它与其他的不同,叫什么?%H
%M
%S
T
答案1
POSIX 规范中使用的术语date
命令是“转换规格”。
该命令的格式字符串date
与 C 函数的格式字符串密切相关printf
; C 标准还提到%d
“转换规范”之类的内容。
T
前面没有的%
只是一个字符:“所有其他字符应不加更改地复制到输出。”
根据 POSIX 描述的更改历史部分date
:
描述已更新为引用转换规范,而不是字段描述符,以与 LC_TIME 类别保持一致。
显然,该规范的早期版本使用了“字段描述符”一词,但“转换规范”是当前的官方术语。
当然这并不意味着你有以这种方式提及他们。
答案2
我认为“转义序列”或(在本例中)“百分比转义序列的特殊字符”将是引用它们的典型方式。反斜杠和百分比转义序列在 C 中广泛使用(例如 printf),因此它们也被过滤到多个 Unix 命令中(例如指定 shell 的提示符)。
“转义序列”为“%Y”、“%m”、“%d”等; “特殊字符”为“Y”、“m”、“d”等。 “%”将是“转义字符”(赋予后续字符不寻常/特殊含义的字符)。
答案3
这个文件IBM 信息中心明确指出字母表%Y
、%m
、%d
、%H
、%M
、等中%S
称为“字段描述符”。
您必须先于每个字段描述符与一个%(百分号)。系统用指定的值替换字段描述符。 [...] 该
date
命令将任何其他字符复制到输出而不进行更改。
这回答了我的两个问题(关于 %n 和 T)。我相信这是最权威的。
答案4
正如其他人所说,这T
是一个字面字母T
。但具体来说,您的示例date "+%Y-%m-%dT%H:%M:%S%:z"
似乎是符合以下格式的格式字符串ISO-8601日期和时间的规范。所以这里T
是分隔日期和时间的分隔符。