指令「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是分隔日期和時間的分隔符號。

相關內容