Interpolazione del simbolo del dollaro all'interno delle virgolette in bash


9

Sto eseguendo questo piccolo script di test che ho scritto:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

dalla riga di comando:

./test.sh "1092$212"

ma il simbolo del dollaro viene rimosso. Se scappo, funziona. Ma ho pensato che le doppie virgolette mi avrebbero protetto dalla necessità di farlo. Qualcuno può aiutarmi a capire cosa sta succedendo e come risolverlo?


Il problema è che è ambiguo - anche per me come umano - quello che vuoi qui, quindi il computer non ha possibilità. Forse l'interprete bash sta cercando di ottenere $ 212. Bash fallisce silenziosamente se si tenta di espandere una variabile che non esiste, quindi $ viene rimosso. Considera di racchiudere le tue variabili tra parentesi, ad esempio "1092 $ {2} 12"
Brian Peterson,

Risposte:


18

Le variabili sono ancora espanse tra virgolette doppie. Se si desidera evitare questo comportamento, è necessario utilizzare virgolette singole.


Grazie. Questo funziona C'è una ragione per questo?
Amir Afghani,

8
Sì. È stato progettato in questo modo! In realtà è abbastanza utile essere in grado di espandere le variabili all'interno di una stringa tra virgolette. È una caratteristica. Se non si desidera il comportamento, utilizzare virgolette singole, è per questo che sono state progettate.
Caleb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.