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`