Hacer eco de una cadena con una variable en ella sin expandirla / evaluarla [cerrado]

12

He buscado por todas partes. Probé eco e impresión. Intenté comillas simples y dobles. Pero analicé los datos y los asigné a una variable y me gustaría evaluarlos si hay una variable dentro de ellos. Luego reemplazaré la variable con un comodín y buscaré el archivo.

Ejemplo:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

Aquí está al menos uno de mis muchos fracasos:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

Sé que tiene algo que ver con la expansión, pero no tengo idea de cómo resolverlo. Cualquier ayuda sería apreciada. ¡Gracias!

krmarshall87
fuente
¿Qué es lo que necesitas resolver? Que var contiene un no expandido $date? Para ese uso: var='file.$DATE.txt'. Para ampliar la fecha cuando se usa var? Estoy seguro de que necesita explicar lo que está preguntando.
Lo sentimos, para probar si una variable está definida dentro de la variable "var". Anidado de algún tipo.
krmarshall87
Encontré una solución a mi dilema eliminando inmediatamente cualquier cosa que pareciera ser una variable (sin importarme primero lo que necesite) y cambiándola por un comodín: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

Respuestas:

20

Si necesita $datedentro de la variable var:

var='file.$date.txt'

Eso mantendrá el $ dentro de la variable:

$ echo "$var" | grep '\$'
file.$date.txt

fuente
8

Use comillas simples alrededor de las variables para evitar la expansión del shell. El ejemplo echo '$file'no se expandirá $file.

Editar después del comentario a continuación:

Puede escapar del $signo int la varvariable con var="file.\$DATE.txt".

Munir
fuente
Lo necesito para expandirme, pero solo un nivel. Olvidé agregar un resultado deseado paso a paso. Pero me gustaría evaluar el contenido del archivo $ para un signo de dólar ($ DATE).
krmarshall87
Editado para resolver eso.
Munir
Recibo esos datos de una fuente externa. Incluso reemplazar el $ con un \ $, creo, requeriría un eco. SIN EMBARGO, déjame ver si cuando lo estoy analizando puedo introducirlo.
krmarshall87