Je veux faire la date
commande avec un formatage sympa comme ceci:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Mais je veux enregistrer cela dans une variable, donc je pourrais appeler à partir d'un script comme celui-ci:
echo "$(nice_date) [WARNING] etc etc"
Mais ça ne marche pas
$ nice_date="date +%Y-%m-%d %H:%M:%S"
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S’
Try 'date --help' for more information.
$ nice_date="date +\"%Y-%m-%d %H:%M:%S\""
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
$ nice_date='date +"%Y-%m-%d %H:%M:%S"'
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
Quelle est la bonne façon de procéder, de sorte que la commande date pour obtenir un argument correct?
"%F %T"
si vous utilisez GNUdate
.nice_date="date +%Y-%m-%d-%H:%M:%S"
, cela fonctionne. Je ne vois pas actuellement comment protéger cet espace du deuxième shell.Réponses:
La raison pour laquelle votre exemple échoue est due au fonctionnement du fractionnement de mots du shell. Lorsque vous exécutez
"$($nice_date)"
, le shell exécute ladate
commande avec deux arguments"+%Y-%m-%d"
et"%H:%M:%S"
. Cela échoue car la chaîne de formatage pour la date doit être un seul argument.La meilleure façon de le faire est d'utiliser une fonction au lieu de stocker la commande dans une variable:
Si vous vouliez vraiment stocker la commande dans une variable, vous pouvez utiliser un tableau:
Pour plus de détails sur les cas complexes de stockage d'une commande dans une variable, voir BashFAQ 050 .
la source
date: extra operand ‘’
erreurs avec les deux approches ciJe suis d'accord qu'une fonction est la meilleure façon de procéder. Comme alternative, stockez simplement le format en tant que variable plutôt que la commande entière:
la source
echo
substitution de commande et sont également superflues.La réponse la plus courte est
la source
Un moyen simple consiste à simplement «s'échapper» de l'espace avec un \
la source
Veuillez essayer ci-dessous:
Vous devez ajouter le symbole "" le symbole qui se trouve sur la touche tilde du clavier. Le symbole indique au shell d'exécuter d'abord la commande, puis de l'assigner à la variable.
la source
Au lieu de:
Essayer:
De plus, vous n'avez pas besoin de la dernière substitution de commande:
la source
Eu le même problème; a dû mettre une date dans une impression awk pour le traitement par splunk. j'ai utilisé
ensuite
la source