Я пытаюсь сделать заменить следующие PERL команды:
perl -C -p -i -e 's/([\?\.\!])\n/$1 /g' html/數14.html
Результат хорошо, когда я называю его из командной строки. Когда я вызываю его из Makefile, он не работает. По-видимому, $ 1 интерпретируется как переменная оболочки.
В Makefile выглядит следующим образом:
數14.html: 數14.adoc 40_2064_Im\ Strand-Appartment.adoc 41_2064_Ein\ Plan.adoc 42_1915_In\ einer\ Suppenküche.adoc
asciidoctor -D html parts/數14.adoc
perl -C -p -i -e 's/([\?\.\!])\n/$1 /g' html/數14.html
Как я могу иметь нормальное регулярное выражение поведение здесь?
Просьба показать, как вы вызываете его в своем сценарии bash. Он не будет переменной оболочки, если он одинарный, как в вашем примере выше; но это будет, если вы поместите несколько разных котировок вокруг него. Например, 'foo = $ (perl -C -p -i -e 's/([\? \. \!]) \ N/$ 1/g' html/數 14.html)' цитируется '$() ', который расширит' $ 1', и вам нужно будет сбежать '$ 1' в' \ $ 1'. – Amadan
Читать эту тему: [http://stackoverflow.com/questions/31557677/how-to-pass-a-regular-expression-as-a-parameter-to-a-perl-one-liner-in-a- bash-sc/31563152 # 31563152] – Poyke
Да, извините. Это не скрипт bash, это Makefile. : - | – Michael