L'approccio corretto è definire la tua funzione all'interno del tuo script Bash.
function my_date {
date "+%y-%m-%d %H:%M:%S"
}
Ora puoi usare my_date
come se fosse un programma esterno.
Ad esempio:
echo "It is now $(my_date)."
O semplicemente:
my_date
Perché il tuo approccio non funziona?
Il primo problema è che il tuo compito è rotto.
DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""
Questo viene analizzato come un'assegnazione della stringa date +%y-%m-%d
alla variabile DATE_COMMAND
. Dopo lo spazio vuoto, la shell inizia a interpretare i simboli rimanenti in modi che non avevi previsto.
Questo potrebbe essere parzialmente risolto modificando la quotazione.
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
Tuttavia, questo non risolve davvero il problema perché se ora usiamo
echo $($DATE_COMMAND)
Non espanderà correttamente l'argomento. Il date
il programma vedrà gli argomenti '+%y-%m-%d
e %H:%M:%S'
(con virgolette) invece di una singola stringa. Questo potrebbe essere risolto usando eval
come in
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)
dove la variabile DATE_COMMAND
viene prima espanso alla stringa date '+%y-%m-%d %H:%M:%S'
cioè eval
uated come se fosse scritto così invocando così date
correttamente.
Tieni presente che lo sto mostrando solo per spiegare il problema. eval
non è una buona soluzione qui. Usa invece una funzione.
PS È meglio evitare stringhe identificative tutte maiuscole poiché spesso sono in conflitto con le variabili d'ambiente o addirittura hanno un significato magico per la shell.
Fuggire dallo spazio funziona per me.
echo `date +%d.%m.%Y\ %R.%S.%3N`