/ / Citazioni letterali in flag per un comando in uno script bash: bash, shell, escape, virgolette

Citazioni letterali in flag per un comando in uno script bash: bash, shell, escape, quotazioni

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 evaling 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 № 1

Tu 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).