Si je lance la ligne de commande suivante sur Ubuntu:
var="$(date +"%x %r %Z")"
echo var
Je peux obtenir la sortie désirée. Mais si je cours
date +%x %r %Z
On me donnera des erreurs:
date: extra opérande '% r'
Essayez 'date - help' pour plus d'informations.
Alors, quelle est la commande de date correspondant à var="$(date +"%x %r %Z")"
? Merci.
Vous n'avez pas copié exactement la même commande. Vous avez écrit date +"%x %r %Z"
entre parenthèses. Cela fonctionne bien à l'extérieur. Sinon, date
a trois arguments (+%x
, %r
et %Z
), plutôt qu'un (+%x %r %Z
).
De man bash
:
Lorsque vous utilisez le formulaire $ (commande), tous les caractères entre les parenthèses constituent la commande; aucun n'est traité spécialement.
Les substitutions de commandes peuvent être imbriquées.
Les parenthèses étant associées avant d'évaluer le contenu, la commande n'est pas scindée sous la forme $(date +%x
, %r
, %Z)
.
Remarque :
Vous avez oublié le $
de echo $var
.
Alors, quelle est la commande de date correspondant à var = "$ (date +"% x% r% Z ")"?
Eh bien, comme déjà indiqué dans une autre réponse que vous avez manqué de citer les options à droite, il devrait être au moins:
date +"%x %r %Z"
Ceci est nécessaire parce que vous utilisez des espaces pour séparer les différentes informations. La page de manuel pour la date suggère d'utiliser -
ou _
, ce qui vous permet d'omettre le en citant tous ensemble dans un terminal normal, ou vous échappez aux espaces blancs.
Exemples:
en utilisant '-' comme diviseur
date +%x-%r%Z
donne le résultat suivant:
21.09.2018-11:30:15 CEST
en utilisant '_' comme diviseur
date +%x_%r%Z
donne le résultat suivant:
21.09.2018_11:30:15 CEST
utilisant des espaces blancs échappés comme diviseur
date +%x\ %r%Z
donne le résultat suivant:
21.09.2018 11:30:15 CEST
ne pas utiliser de diviseurs du tout
date +%x%r%Z
donne le résultat suivant:
21.09.201811:30:15 CEST
Reste pour un cas d'utilisation spécial. Lorsque vous essayez d'incorporer la date dans une commande crontab
, vous devez également vous échapper du signe %
. Donc, en tant qu’information non divisée, la commande ressemblerait à ceci (Les règles mentionnées précédemment s’appliquent pour s’échapper encore):
date +\%x\%r\%Z