El enfoque correcto es definir su propia función dentro de su script Bash.
function my_date {
date "+%y-%m-%d %H:%M:%S"
}
Ahora puedes usar my_date como si fuera un programa externo.
Por ejemplo:
echo "It is now $(my_date)."
O simplemente:
my_date
¿Por qué no funciona su enfoque?
El primer problema es que tu tarea está rota.
DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""
Esto se analiza como una asignación de la cadena date +%y-%m-%d a la variable DATE_COMMAND . Después del espacio en blanco, el caparazón comienza a interpretar los símbolos restantes de maneras que no pretendías.
Esto podría arreglarse parcialmente cambiando la cotización.
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
Sin embargo, esto realmente no resuelve el problema porque si ahora usamos
echo $($DATE_COMMAND)
No ampliará el argumento correctamente. El date el programa verá los argumentos '+%y-%m-%d y %H:%M:%S' (con comillas) en lugar de una sola cadena. Esto podría resolverse usando eval como en
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)
donde la variable DATE_COMMAND primero se expande a la cadena date '+%y-%m-%d %H:%M:%S' eso es entonces eval uado como si estuviera escrito así invocando así date correctamente.
Tenga en cuenta que solo estoy mostrando esto para explicar el problema. eval no es una buena solución aquí. Utilice una función en su lugar.
PD:es mejor evitar las cadenas de identificadores en mayúsculas, ya que a menudo entran en conflicto con las variables de entorno o incluso tienen un significado mágico para el shell.
Escapar del espacio funciona para mí.
echo `date +%d.%m.%Y\ %R.%S.%3N`