Sto scrivendo uno script Bash in cui sto eseguendo uno script perl che richiede flag con virgolette doppie. Eseguendo lo script normalmente, eseguiresti
$ perl script.pl -flag="something" -anotherflag="somethingelse"
Nel mio script, sto usando variabili in questi flag, ma vorrei preservare le virgolette doppie, quindi ho qualcosa del tipo:
variable=foo
perl script.pl -flag="something" -anotherflag="$variable"
quando corro bash -x myscript.sh
, Lo vedo aggiunge virgolette singole attorno all'intero flag, mantenendo le virgolette doppie, causando l'errore dello script perl:
perl script.pl "-flag="something"" "-anotherflag="foo""
Ho anche provato eval
ing il tutto (eval perl [...]
) e ha eliminato del tutto le virgolette. Come posso fare in modo che Bash esegua lo script con le virgolette doppie intatte?
risposte:
0 per risposta № 1Tu dici...:
Eseguendo lo script normalmente, lo faresti correre
$ perl script.pl -flag = "qualcosa" -anotherflag = "somethingelse"
... ma poi la shell in esecuzione sul $
il prompt rimuove il "
: la sceneggiatura di perl non li avrebbe mai visti (avrebbero solohanno svolto il loro ruolo di prevenzione degli spazi, e caratteri speciali come ">", "<", "|, ecc., essere interpretati al loro interno - quegli spazi e / o caratteri speciali sarebbero semplicemente passati come parte dell'arg ). Con i valori come li stai dando (niente spazi, niente speciali), quelle doppie virgolette sono totalmente inutili e non farebbe assolutamente alcuna differenza ometterle.
Ad ogni modo, se questo è davvero l'effetto che vuoi, basta fare nel tuo script bash:
perl script.pl -flag="something" -anotherflag="$variable"
(o, ometti le doppie virgolette - è assolutamente indifferente in giro something
, indifferente in giro $variable
se come nel tuo esempio è giusto foo
ma non in tutti i casi).