Este es el guión:
#!/bin/bash
thedate=$(date)
var='Current date is $thedate'
echo $var
El resultado es La fecha actual es $thedate y me gustaría que muestre la fecha, ¿qué hice mal? Cualquier ayuda sería apreciada.
Respuesta1
El problema es que bash
expande las variables de entorno solo una vez, a menos que uses eval
, lo que hace que la línea de comando se analice dos veces:
eval echo $var
Tenga en cuenta que la fecha y la hora que se muestran son las actuales cuando thedate
se configuran, no cuando $var
se hace referencia. Para mostrar la hora actual a la que $var
se hace referencia, necesita: -
var='Current date is $(date)'
eval echo $var
Sería mejor no utilizar variables, sino definir una función:-
cdate() { echo Current date is $(date); }
...
cdate
Por supuesto, es mejor aún no utilizar echo
, pero dejarse date
añadir el texto extra:
cdate() { date +"Current date is %c"; }
Esto no genera el mismo formato que el date
predeterminado, pero no hay ningún especificador de formato para el predeterminado.
Respuesta2
var='Current date is $thedate'
Las variables no se expanden entre comillas simples, por lo que se asigna una cadena que contiene el texto literal $thedate
. Debe utilizar comillas dobles aquí para que la variable se expanda.
echo $var
Además, aquí debe utilizar comillas dobles alrededor de la variable para evitar que esté sujeta a la división de palabras y la expansión de la ruta, es decir echo "$var"
. En este caso particular, puede evitar el uso de comillas, ya que la fecha probablemente no contendrá caracteres comodín. Pero sin comillas, por ejemplo, la cadena de fecha Fri Dec 7 20:41:21 EET 2018
se generaría como Fri Dec 7 20:41:21 EET 2018
, es decir, el doble espacio después del nombre del mes se contraería en un solo espacio.
Respuesta3
Utilice comillas dobles en lugar de comillas simples. Bash no expandirá las variables cuando estén entre comillas simples.