2 votes

Quelle est la ligne de commande correspondant à var="$(date + "%x %r %Z")" ?

Si je lance la ligne de commande suivante sur Ubuntu :

var="$(date +"%x %r %Z")"
echo var

Je peux obtenir le résultat souhaité. Mais si je lance simplement

date +%x %r %Z

Je recevrai des erreurs :

date : opérande supplémentaire "%r".

Essayez 'date --help' pour plus d'informations.

Quelle est donc la commande de date correspondant à var="$(date +"%x %r %Z")" ? Merci de votre réponse.

5voto

Damodar Das Points 111

Vous n'avez pas copié exactement la même commande. Vous avez écrit date +"%x %r %Z" entre parenthèses. Cela fonctionne très bien à l'extérieur. Autrement, date a trois arguments ( +%x , %r y %Z ), plutôt qu'un seul ( +%x %r %Z ).

De man bash :

Lors de l'utilisation de la forme $(commande), tous les caractères entre les parenthèses constituent la commande ; aucun d'entre eux ne fait l'objet d'un traitement particulier.
Les substitutions de commandes peuvent être imbriquées.

Les parenthèses sont prises en compte avant l'évaluation du contenu, de sorte que la commande n'est pas scindée comme suit $(date +%x , %r , %Z) .

Note :
Vous avez oublié le $ de echo $var .

1voto

Videonauth Points 31896

Quelle est donc la commande de date correspondant à var="$(date + "%x %r %Z")" ?

Comme indiqué dans une autre réponse, vous n'avez pas cité les options correctement, elles devraient l'être au moins :

date +"%x %r %Z"

Cela est nécessaire parce que vous utilisez des espaces blancs pour séparer les différentes informations. page de manuel pour la date suggère d'utiliser - ou _ Avec cela, vous pouvez omettre les guillemets dans le terminal normal, ou vous échappez les espaces blancs.


Exemples :

  • en utilisant "-" comme séparateur

    date +%x-%r%Z

    donne le résultat suivant :

    21.09.2018-11:30:15 CEST
  • en utilisant "_" comme séparateur

    date +%x_%r%Z

    donne le résultat suivant :

    21.09.2018_11:30:15 CEST
  • utiliser les espaces blancs échappés comme séparateurs

    date +%x\ %r%Z

    donne le résultat suivant :

    21.09.2018 11:30:15 CEST
  • ne pas utiliser d'intercalaires du tout

    date +%x%r%Z

    donne le résultat suivant :

    21.09.201811:30:15 CEST

Reste pour un cas d'utilisation particulier. Lorsque vous essayez d'incorporer une date dans un crontab vous devez échapper à la commande % également. Ainsi, en tant qu'information non divisée, la commande ressemblerait à ceci (les règles susmentionnées s'appliquent pour l'échappement) :

date +\%x\%r\%Z

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X