Commande 'date + FORMAT' - Comment sont appelés% a,% A,% b, etc.?

10

La datecommande affiche la date et l' heure actuelle comme ceci: Fri Apr 12 15:04:03 UTC 2013.

Pour avoir la date et l'heure de sortie dans un format personnalisé, nous pouvons utiliser date +FORMAT, par exemple, comme ceci: date "+%Y-%m-%dT%H:%M:%S%:z"qui donne quelque chose comme 2013-04-12T15:04:37+00:00.

Mais je veux savoir ce que le %Y, %m, %d, %H, %M, %S, etc. sont collectivement appelés (la terminologie). Aussi, quel est le Tnom, car il est différent des autres?

c'est moi
la source
3
«FORMAT contrôle la sortie. Les séquences interprétées sont… »- man dateEt le« T »n'est qu'un« T »littéral.
manatwork
@manatwork Dans la page de manuel, je pensais que les séquences faisaient référence à la fois à %Yleur signification respective.
its_me
Astuce:date +"You will die in the year %Y"
Izkata
@Izkata n'a aucun sens (?)
its_me
1
@TheoneManis Juste un exemple de ce qui Tn'est pas spécial. De plus, je passais une journée bizarre au travail quand je l'ai tapé (écouter les conversations de collègues).
Izkata

Réponses:

7

Le terme utilisé dans la spécification POSIX de la datecommande est "spécifications de conversion".

La chaîne de format pour la datecommande est étroitement basée sur la chaîne de format pour la printffonction de C ; la norme C se réfère également à des choses comme %d«spécifications de conversion».

Tnon précédé d' %un simple caractère: "Tous les autres caractères doivent être copiés dans la sortie sans modification."

Selon la section de l'historique des modifications de la description POSIX de date:

La DESCRIPTION est mise à jour pour faire référence aux spécifications de conversion, au lieu des descripteurs de champ pour la cohérence avec la catégorie LC_TIME.

Ainsi, apparemment, une version antérieure de la spécification utilisait l'expression "descripteurs de champ", mais "spécifications de conversion" est le terme officiel actuel.

Bien sûr, cela ne signifie pas que vous devez vous y référer de cette façon.

Keith Thompson
la source
Les termes " conversion sequences" ou " format sequences" sont-ils également appropriés? Je considérais sequencesplus specificationsparce que il est effectivement mentionné dans la page de manuel date.
its_me
2
@TheoneManis: L'un des trois semble suffisamment évident sur ce que cela signifie.
Keith Thompson
4

Je pense que les «séquences d'échappement» ou (dans ce cas) les «caractères spéciaux pour les séquences à pourcentage échappé» seraient la façon typique de s'y référer. Les séquences avec barre oblique inverse et pourcentage échappé sont très utilisées en C (par exemple printf), elles ont donc également filtré en plusieurs commandes Unix (comme en spécifiant l'invite pour le shell).

La "séquence d'échappement" étant "% Y", "% m", "% d" et ainsi de suite; et les "caractères spéciaux" étant "Y", "m", "d" et ainsi de suite. "%" serait le "caractère d'échappement" (le caractère qui donne au caractère suivant une signification inhabituelle / spéciale).

Baard Kopperud
la source
3

Ce document du Centre d' information d'IBM indique clairement que les alphabets dans %Y, %m, %d, %H, %M, %S, etc. sont appelés « Champ Descripteurs ».

Vous devez faire précéder chaque descripteur de champ d'un % (signe de pourcentage). Le système remplace le descripteur de champ par la valeur spécifiée. [...] La datecommande copie tous les autres caractères dans la sortie sans modification.

Cela répond à mes deux questions (environ% n & T). Et je crois que cela fait autant autorité que possible.

c'est moi
la source
1
IBM n'a pas inventé la datecommande; qu'est-ce qui fait que leur documentation fait autorité? Le comportement de la commande est actuellement défini par POSIX, qui n'utilise pas ce terme. L'historique des modifications au bas de la description POSIX indique "La DESCRIPTION est mise à jour pour faire référence aux spécifications de conversion, au lieu des descripteurs de champ pour la cohérence avec la catégorie LC_TIME.", Ce qui implique que "spécification de conversion", et non "diescriptor de champ" est la bonne terme en cours. Voir aussi ma réponse mise à jour.
Keith Thompson
2

Comme d'autres l'ont dit, Tc'est une lettre littérale T. Mais pour être précis, votre exemple date "+%Y-%m-%dT%H:%M:%S%:z"semble être une chaîne de format conforme à la spécification ISO-8601 pour la date et l'heure. Voici donc Tun délimiteur qui sépare la date de l'heure.

Jeff Daly
la source