我會用一個更簡單的例子來指導你。假設您想打印單詞test
。
我們可以做到這一點與此一行代碼:
perl -e'print "test"'
現在假設我們有存儲在一個變量,$FILENAME
字符串test
。我們可以打印與
print "$FILENAME"
但我們必須先設置:
perl -e'$FILENAME="test"; print "$FILENAME"'
但如果這個變量被設置在bash
?你正確地做了這個部分。
FILENAME=test
讓我們試着在Perl打印此:
perl -e'print "$FILENAME"' # prints nothing
如果變量是單引號內,然後Perl是解釋它。如果我們把它放在單引號之外,那麼它將在bash中被解釋並且程序將被傳遞給perl解釋器。
perl -e'print "'$FILENAME'"' # prints test
# open_^ ^ open__^^
# close________^ close___^
我喜歡把它作爲封閉單引號,以獲得bash的解釋變量,並再次打開它們去回perl的。
這使我絆倒了以前。你可以在這裏讀到它:Why is '$_' the same as $ARGV in a Perl one-liner?
你可以閱讀有關\Q...\E
here。
您可能仍然需要它,例如,如果您的變量中有?
。 Quotemeta將轉義特殊字符來匹配它們的文字字符,而不是使用它們的特殊含義。
試試這個'perl -pe's | encoding =「windows-1250」。\?\> | encoding =「utf-8」?> \ n <! - '$ FILENAME' - > \ n | g'file_unprocessed.xml> file_processed_final.xml' – chilemagic 2014-10-10 21:47:12
缺少撇號!謝謝! – Adrian 2014-10-10 21:52:18