2010-10-13 23 views
16

Si tengo una variable que contiene un signo de dólar sin guardar, ¿hay alguna manera de repetir todo el contenido de la variable?Cómo hacer eco de una variable que contiene un signo de dólar no guarnecido en bash

Por ejemplo algo que llama a un script:

./script.sh "test1$test2"

y luego si quiero usar el parámetro se puede ser "truncada" de esta manera:

echo ${1}
test1

de un solo curso citar el nombre vairable no ayuda. No puedo encontrar la forma de citarlo para poder, al menos, escapar del signo de dólar una vez que el guión recibe el parámetro.

Respuesta

7

La variable se reemplaza antes de ejecutar el script.

./script.sh 'test1$test2' 
+0

Sí, este parece ser el caso :) – Not22

+0

Hay otras situaciones en las que realmente tengo variables con signos de dólar sin guardar, como cuando estoy leyendo datos de archivos. Entonces, quiero llamar a mi script con esta información, ¿así que es mi única opción echar todo el archivo antes de leerlo? – Not22

+1

Leer datos de archivos no hace sustitución de variables. –

28

El problema es que la escritura recibe "test1" en el primer lugar y no puede saber que había una referencia a una variable de vacío (no declarada). Usted tiene que escapar del $ antes de pasarlo a la secuencia de comandos, así:

./script.sh "test1\$test2" 

O utilice comillas simples ' así:

./script.sh 'test1$test2' 

En cuyo caso fiesta no se expandirá las variables de esa cadena de parámetros .

0

Como le dijo Ignacio, la variable se reemplaza, por lo que sus scripts obtienen ./script.sh test1 como valores para $0 y $1.

Pero incluso en el caso de que haya utilizado citas literales para pasar el argumento, siempre debe citar "$1" en su echo "${1}". Esta es una buena práctica.

+0

Y los refuerzos son * no * necesarios, ya que esta es una simple sustitución. –

+0

sí, no son necesarios. Usarlos es simplemente opcional. – Benoit

4

usando comillas simples, los metacaracteres como $ conservarán su valor literal. Si se utilizan comillas dobles, los nombres de las variables se interpolarán.

Cuestiones relacionadas