Interpolação de cifrão dentro de aspas no bash

9

Estou executando este pequeno script de teste que escrevi:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

na linha de comando:

./test.sh "1092$212"

mas o cifrão está sendo retirado. Se eu escapar, funciona. Mas pensei que as aspas duplas me protegessem da necessidade de fazer isso. Alguém pode me ajudar a entender o que está acontecendo e como corrigir isso?

Amir Afghani
fonte
O problema é que é ambíguo - mesmo para mim como humano - o que você quer aqui, para que o computador não tenha chance. Talvez o intérprete do bash esteja tentando obter 212 dólares. O Bash falha silenciosamente se você tentar expandir uma variável que não existe, portanto, o $ é retirado. Considere agrupar suas variáveis ​​entre colchetes, por exemplo, "1092 $ {2} 12"
Brian Peterson

Respostas:

18

As variáveis ​​ainda são expandidas entre aspas duplas. Se você deseja evitar esse comportamento, use aspas simples.

Caleb
fonte
Obrigado. Isso funciona. Existe uma razão para isso?
Amir Afghani
8
Sim. Foi projetado dessa maneira! Na verdade, é bastante útil poder expandir variáveis ​​dentro de uma string entre aspas. É uma característica. Se você não quiser o comportamento, use aspas simples, é para isso que elas foram projetadas.
Caleb