命令“date +FORMAT”——%a、%A、%b 等被称为什么?

命令“date +FORMAT”——%a、%A、%b 等被称为什么?

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%ST

答案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是分隔日期和时间的分隔符。

相关内容