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?


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.