Команда 'date + FORMAT' - Как называются% a,% A,% b и т. Д.?

10

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называется, так как он отличается от остальных?

это я
источник
3
«ФОРМАТ контролирует выход. Интерпретируемые последовательности ... »- человек. dateА« Т »- это просто буквальное« Т ».
manatwork
@manatwork На странице руководства я думал, что последовательности относятся как к %Yих значению, так и к ним.
its_me
Совет:date +"You will die in the year %Y"
Иската
@Izkata не имеет смысла (?)
its_me
1
@TheoneManis Просто пример того, что это Tне особенное. Кроме того, у меня был странный день на работе, когда я печатал это (слушая разговоры коллег).
Изката

Ответы:

7

В спецификации команды POSIX используется термин date«спецификации преобразования».

Строка формата для dateкоманды тесно связана с строкой формата для printfфункции C ; Стандарт C также относится к таким вещам, %dкак «спецификации преобразования».

Tперед ним не %стоит просто символ: «Все остальные символы должны быть скопированы на выход без изменений».

Согласно разделу истории изменений описания POSIX date:

ОПИСАНИЕ обновлено для ссылки на спецификации преобразования вместо дескрипторов полей для соответствия категории LC_TIME.

Таким образом, очевидно, что более ранняя версия спецификации использовала фразу «дескрипторы полей», но «спецификации преобразования» - это текущий официальный термин.

Конечно, это не значит, что вы должны относиться к ним таким образом.

Кит Томпсон
источник
Подходят ли термины " conversion sequences" или " format sequences"? Я рассматриваю sequencesболее specificationsпотому , что это на самом деле упоминается в странице руководства date.
its_me
2
@TheoneManis: Любой из трех кажется достаточно очевидным о том, что это значит.
Кит Томпсон
4

Я думаю, что «escape-последовательности» или (в данном случае) «специальные символы для процентно-экранированных последовательностей» будут типичным способом обращения к ним. Последовательности с обратной косой чертой и процентами экранирования широко используются в C (например, printf), поэтому они также отфильтрованы по нескольким Unix-командам (например, указание приглашения для оболочки).

"Escape-последовательность": "% Y", "% m", "% d" и т. Д .; и «специальные символы» - «Y», «m», «d» и так далее. «%» будет «escape-символом» (символ, который придает следующему символу необычное / особое значение).

Баард Копперуд
источник
3

Этот документ из информационного центра IBM четко сказано , что алфавиты в %Y, %m, %d, %H, %M, %Sи т.д., называются « Поле дескрипторы ».

Вы должны перед каждым дескриптором поля с % (знаком процента). Система заменяет дескриптор поля указанным значением. [...] Команда dateкопирует любые другие символы в вывод без изменений.

Это отвечает на два моих вопроса (о% n & T). И я считаю, что это настолько авторитетно, насколько это возможно.

это я
источник
1
IBM не изобрела dateкоманду; что делает их документацию авторитетной? Поведение команды в настоящее время определяется POSIX, который не использует этот термин. История изменений в нижней части описания POSIX гласит: «ОПИСАНИЕ обновлено для ссылки на спецификации преобразования, а не на дескрипторы полей для согласованности с категорией LC_TIME.», Подразумевая, что «спецификация преобразования», а не «дескриптор поля», является правильной текущий срок. Смотрите также мой обновленный ответ.
Кит Томпсон
2

Как утверждают другие, Tэто буквальное письмо T. Но, если быть точным, ваш пример date "+%Y-%m-%dT%H:%M:%S%:z"выглядит как строка формата, соответствующая спецификации ISO-8601 для даты и времени. Итак, здесь Tесть разделитель, который отделяет дату от времени.

Джефф Дейли
источник