Interpolación de signos de dólar entre comillas en bash

9

Estoy ejecutando este pequeño script de prueba que escribí:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

desde la línea de comando:

./test.sh "1092$212"

pero el signo de dólar está siendo eliminado. Si me escapo, funciona. Pero pensé que las comillas dobles me protegerían de la necesidad de hacer esto. ¿Puede alguien ayudarme a entender qué está pasando y cómo solucionarlo?

Amir Afghani
fuente
El problema es que es ambiguo, incluso para mí como humano, lo que quieres aquí, por lo que la computadora no tiene ninguna posibilidad. Quizás el intérprete bash esté tratando de obtener $ 212. Bash falla silenciosamente si intenta expandir una variable que no existe, por lo que se elimina el $. Considere incluir sus variables entre paréntesis, por ejemplo, "1092 $ {2} 12"
Brian Peterson

Respuestas:

18

Las variables todavía se expanden entre comillas dobles. Si desea evitar este comportamiento, debe utilizar comillas simples.

Caleb
fuente
Gracias. Esto funciona. ¿Hay alguna razón para esto?
Amir Afghani
8
Si. Fue diseñado de esa manera! En realidad, es bastante útil poder expandir variables dentro de una cadena entre comillas. Es una característica Si no desea el comportamiento, use comillas simples, para eso fueron diseñadas.
Caleb