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