La bonne approche consiste à définir votre propre fonction dans votre script Bash.
function my_date {
date "+%y-%m-%d %H:%M:%S"
}
Vous pouvez maintenant utiliser my_date
comme s'il s'agissait d'un programme externe.
Par exemple :
echo "It is now $(my_date)."
Ou simplement :
my_date
Pourquoi votre approche ne fonctionne-t-elle pas ?
Le premier problème est que votre devoir est cassé.
DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""
Ceci est analysé comme une affectation de la chaîne date +%y-%m-%d
à la variable DATE_COMMAND
. Après le blanc, le shell commence à interpréter les symboles restants d'une manière que vous n'aviez pas prévue.
Cela pourrait être partiellement corrigé en modifiant la citation.
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
Cependant, cela ne résout pas vraiment le problème car si nous utilisons maintenant
echo $($DATE_COMMAND)
Cela ne développera pas correctement l'argument. Le date
le programme verra les arguments '+%y-%m-%d
et %H:%M:%S'
(avec guillemets) au lieu d'une seule chaîne. Cela pourrait être résolu en utilisant eval
comme dans
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)
où la variable DATE_COMMAND
est d'abord étendu à la chaîne date '+%y-%m-%d %H:%M:%S'
c'est alors eval
uated comme s'il était écrit comme so invoquant ainsi date
correctement.
Notez que je ne montre ceci que pour expliquer le problème. eval
n'est pas une bonne solution ici. Utilisez plutôt une fonction.
PS Il est préférable d'éviter les chaînes d'identification entièrement en majuscules car celles-ci sont souvent en conflit avec les variables d'environnement ou ont même une signification magique pour le shell.
Échapper à l'espace fonctionne pour moi.
echo `date +%d.%m.%Y\ %R.%S.%3N`