Dollarzeicheninterpolation innerhalb von Anführungszeichen in Bash

9

Ich führe dieses kleine Testskript aus, das ich geschrieben habe:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

von der Kommandozeile:

./test.sh "1092$212"

aber das Dollarzeichen wird entfernt. Wenn ich ihm entkomme, funktioniert es. Aber ich dachte, die doppelten Anführungszeichen würden mich davor schützen, dies tun zu müssen. Kann mir bitte jemand helfen zu verstehen, was los ist und wie man das behebt?

Amir Afghani
quelle
Das Problem ist, dass es - selbst für mich als Mensch - nicht eindeutig ist, was Sie hier wollen, sodass der Computer keine Chance hat. Vielleicht versucht der Bash-Dolmetscher, 212 Dollar zu bekommen. Bash schlägt stillschweigend fehl, wenn Sie versuchen, eine nicht vorhandene Variable zu erweitern, sodass das $ entfernt wird. Ziehen Sie in Betracht, Ihre Variablen in Klammern zu setzen, z. B. "1092 $ {2} 12"
Brian Peterson,

Antworten:

18

Variablen werden weiterhin in doppelte Anführungszeichen gesetzt. Wenn Sie dieses Verhalten vermeiden möchten, sollten Sie stattdessen einfache Anführungszeichen verwenden.

Caleb
quelle
Danke. Das funktioniert. Gibt es einen Grund dafür?
Amir Afghani
7
Ja. Es wurde so entworfen! Es ist eigentlich sehr nützlich, Variablen innerhalb einer Zeichenfolge in Anführungszeichen erweitern zu können. Es ist eine Funktion. Wenn Sie das Verhalten nicht möchten, verwenden Sie einfache Anführungszeichen. Dafür wurden sie entwickelt.
Caleb