La sustitución del comando Bash no funciona

La sustitución del comando Bash no funciona

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 bashexpande 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 thedatese configuran, no cuando $varse hace referencia. Para mostrar la hora actual a la que $varse 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 dateañadir el texto extra:

cdate() { date +"Current date is %c"; }

Esto no genera el mismo formato que el datepredeterminado, 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 2018se 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.

información relacionada