2016-07-28 16 views
-1

Ich versuche, ein mit folgenden Perl-Befehl ersetzen:

perl -C -p -i -e 's/([\?\.\!])\n/$1 /g' html/數14.html 

Das Ergebnis ist in Ordnung, wenn ich es von der Kommandozeile aufrufen. Wenn ich es in einem Makefile anrufe, funktioniert es nicht. Anscheinend wird $ 1 als Shell-Variable interpretiert.

Im Makefile sieht es wie folgt aus:

數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 

Wie kann ich hier normale regexp Verhalten haben?

+2

Bitte zeigen Sie, wie Sie es in Ihrem Bash-Skript aufrufen. Es handelt sich nicht um eine Shell-Variable, wenn es wie in Ihrem Beispiel oben in Anführungszeichen steht. aber es wird, wenn Sie einige verschiedene Zitate darum herum setzen. Zum Beispiel wird 'foo = $ (perl -C -p -i -e 's/([\? \. \!]) \ N/$ 1/g' html/數 14.html)' mit '$ zitiert() ', was' $ 1' erweitert, und Sie müssten '$ 1' in' \ $ 1' flüchten. – Amadan

+0

Diesen Thread lesen: [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

+1

Ja, tut mir leid. Es ist kein Bash-Skript, es ist ein Makefile. : - | – Michael

Antwort

2

Makefiles interpretieren immer $ Sequenzen vor der Ausführung von Befehlen, abgesehen von einer Quotierung. Um $ in einem Makefile zu entgehen, schreiben Sie es als $$ - das ergibt eine einzelne $ im Befehl.