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?


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.