Буквенные кавычки в флагах для команды в bash-скрипте - PullRequest
2 голосов
/ 22 сентября 2009

Я пишу скрипт на Bash, в котором я запускаю скрипт на Perl, для которого требуются флаги с двойными кавычками. Запустив скрипт нормально, вы бы запустили

$ perl script.pl -flag="something" -anotherflag="somethingelse"

В моем сценарии я использую переменные в этих флагах, но хотел бы сохранить двойные кавычки, поэтому у меня есть что-то вроде:

variable=foo
perl script.pl -flag=\"something\" -anotherflag=\"$variable\"

когда я запускаю bash -x myscript.sh, я вижу, что добавляет одинарные кавычки вокруг всего флага, сохраняя при этом двойные кавычки, вызывая ошибку сценария perl:

perl script.pl '-flag="something"' '-anotherflag="foo"'

Я также попытался eval описать все это (eval perl [...]), и он полностью удалил двойные кавычки. Как я могу заставить Bash запустить скрипт с неповрежденными двойными кавычками?

1 Ответ

0 голосов
/ 22 сентября 2009

Вы говорите ...:

Запустив скрипт нормально, вы бы запустить

$ perl script.pl -flag = "что-то" -anotherflag = "somethingelse"

... но тогда оболочка, запущенная по приглашению $, удалит ": скрипт perl никогда не увидит их (они просто сыграли бы свою роль в предотвращении пробелов и специальных символов, таких как '> ',' <',' | и т. д., будучи интерпретированными внутри них - эти пробелы и / или специальные символы будут просто передаваться как часть аргумента). С такими значениями, как вы их даете (без пробелов, без специальных), эти двойные кавычки абсолютно бесполезны, и было бы абсолютно безразлично их опускать. </p>

В любом случае, если это действительно тот эффект, который вы хотите, просто сделайте в вашем bash-скрипте:

perl script.pl -flag="something" -anotherflag="$variable"

(или, пропустите двойные кавычки - это абсолютно безразлично к something, безразлично к $variable, если, как в вашем примере, это просто foo, но не во всех случаях).

...