variable loop for else bash escaping dollar-sign

loop - Cómo hacer eco de una variable que contiene un signo de dólar no escapado en bash



bash if else (4)

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

Si tengo una variable que contiene un signo de dólar que no se ha escapado, ¿hay alguna manera de hacer eco de todo el contenido de la variable?

Por ejemplo, algo llama a un script:

./script.sh "test1$test2"

y luego, si quiero usar el parámetro, se "trunca" así:

echo ${1}
test1

Por supuesto, una sola cita el nombre variable no ayuda. No puedo averiguar cómo citarlo para poder al menos escapar del signo de dólar una vez que el script recibe el parámetro.


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

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


El problema es que el script recibe "test1" en primer lugar y posiblemente no puede saber que hubo una referencia a una variable vacía (no declarada). Tienes que escapar de $ antes de pasarlo al script, como esto:

./script.sh "test1/$test2"

O use comillas simples como esta:

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

En cuyo caso, bash no expandirá las variables de esa cadena de parámetros.


La variable se reemplaza antes de que se ejecute el script.

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