Interpolacja znaku dolara w cudzysłowie w bash

9

Korzystam z tego małego skryptu testowego, który napisałem:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

z linii poleceń:

./test.sh "1092$212"

ale znak dolara jest usuwany. Jeśli mi się uda, to działa. Ale myślałem, że podwójne cytaty ochronią mnie przed koniecznością zrobienia tego. Czy ktoś może pomóc mi zrozumieć, co się dzieje i jak to naprawić?

Amir Afghani
źródło
Problem polega na tym, że jest niejednoznaczne - nawet jak dla mnie jako człowieka - czego tu chcesz, więc komputer nie ma szans. Być może interpreter bash próbuje uzyskać 212 USD. Bash po cichu kończy się niepowodzeniem, jeśli spróbujesz rozwinąć zmienną, która nie istnieje, więc $ zostanie usunięte. Rozważ umieszczenie zmiennych w nawiasach, np. „1092 $ {2} 12”
Brian Peterson,

Odpowiedzi:

18

Zmienne są nadal rozszerzane w podwójnych cudzysłowach. Jeśli chcesz uniknąć tego zachowania, powinieneś użyć pojedynczych cudzysłowów.

Caleb
źródło
Dziękuję Ci. To działa. Czy jest tego powód?
Amir Afghani,
8
Tak. Zostało tak zaprojektowane! W rzeczywistości całkiem użyteczne jest rozwijanie zmiennych wewnątrz cytowanego ciągu. To funkcja. Jeśli nie chcesz tego zachowania, użyj pojedynczych cudzysłowów, właśnie po to zostały zaprojektowane.
Caleb