2016-07-28 16 views
-1

內使用正則表達式中的$ 1 I嘗試做以下的Perl命令替換:一個Makefile

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

結果是好的,當我把它的命令行。當我從Makefile中調用它時不起作用。顯然$ 1被解釋爲shell變量。

在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 

我怎麼能有正常的正則表達式的行爲嗎?

+2

請告訴你如何在你的bash腳本中調用它。如果它是單引號的,它將不會是一個shell變量,如上例所示;但如果你在它周圍放置一些不同的引號,它會。例如''foo = $(perl -C -p -i -e's /([\?\。\!])\ n/$ 1/g'html /數字14.html)'由'$ ()',它會擴展'$ 1',並且你需要將'$ 1'轉換爲'\ $ 1'。 – Amadan

+0

閱讀此主題:[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

是的,對不起。這不是一個bash腳本,它是一個Makefile。 : - | – Michael

回答

2

Makefile在執行命令前總是解釋$序列,忽略任何引用。爲了在生成文件中轉義$,將其編寫爲$$ - 這將在命令中產生一個$