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ć?


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.