Interpolation de signe dollar à l'intérieur des guillemets en bash

9

Je lance ce petit script de test que j'ai écrit:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

à partir de la ligne de commande:

./test.sh "1092$212"

mais le signe dollar est supprimé. Si je m'échappe, ça marche. Mais je pensais que les doubles guillemets me protégeraient de la nécessité de le faire. Quelqu'un peut-il m'aider à comprendre ce qui se passe et comment y remédier?

Amir Afghani
la source
Le problème est qu'il est ambigu - même pour moi en tant qu'humain - ce que vous voulez ici, donc l'ordinateur n'a aucune chance. L'interprète bash essaie peut-être d'obtenir 212 $. Bash échoue silencieusement si vous essayez de développer une variable qui n'existe pas, ainsi le $ est supprimé. Pensez à placer vos variables entre crochets, par exemple "1092 $ {2} 12"
Brian Peterson

Réponses:

18

Les variables sont toujours développées entre guillemets doubles. Si vous souhaitez éviter ce comportement, utilisez plutôt des guillemets simples.

Caleb
la source
Je vous remercie. Cela marche. Y a-t-il une raison à cela?
Amir Afghani
8
Oui. Il a été conçu de cette façon! Il est en fait très utile de pouvoir développer des variables à l'intérieur d'une chaîne entre guillemets. C'est une fonctionnalité. Si vous ne voulez pas le comportement, utilisez des guillemets simples, c'est pour cela qu'ils ont été conçus.
Caleb