Quiero hacer el date
comando con un formato agradable como este:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Pero quiero guardar esto en variable, para poder llamar desde un script como este:
echo "$(nice_date) [WARNING] etc etc"
Sin embargo, no funciona
$ 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.
¿Cuál es la forma correcta de hacer esto, para que el comando date obtenga un argumento correcto?
"%F %T"
si está utilizando GNUdate
.nice_date="date +%Y-%m-%d-%H:%M:%S"
, funciona. Actualmente no puedo ver cómo proteger ese espacio del segundo shell.Respuestas:
La razón por la que su ejemplo falla es por la forma en que funciona la división de palabras del shell. Cuando ejecuta
"$($nice_date)"
, el shell está ejecutando eldate
comando con dos argumentos,"+%Y-%m-%d"
y"%H:%M:%S"
. Esto falla porque la cadena de formato para la fecha debe ser un argumento único.La mejor manera de hacer esto es usar una función en lugar de almacenar el comando en una variable:
Si realmente desea almacenar el comando en una variable, puede usar una matriz:
Para obtener más detalles sobre los casos complejos de almacenar un comando en una variable, consulte BashFAQ 050 .
fuente
date: extra operand ‘’
errores con los dos enfoques anterioresEstoy de acuerdo en que una función es el mejor camino a seguir. Como alternativa, simplemente almacene el formato como una variable en lugar de todo el comando:
fuente
echo
y la sustitución de comandos también son superfluos.La respuesta más corta es
fuente
Una manera fácil es simplemente 'escapar' del espacio con un \
fuente
Por favor pruebe lo siguiente:
Debe agregar el símbolo "` ", el símbolo que se encuentra en la tecla tilde del teclado. El símbolo dice que el shell debe ejecutar el comando primero y luego asignarlo a la variable.
fuente
En lugar de:
Tratar:
Además, no necesita la última sustitución de comando:
fuente
Tuve el mismo problema; Tuve que poner una fecha en una impresión awk para su procesamiento por splunk. solía
luego
fuente