我有幾個文件命名這樣的東西:file (2).jpg
。我正在編寫一個小Perl腳本來重命名它們,但由於括號未被替換,我得到錯誤。 所以。有人可以告訴我如何在字符串中隱藏所有括號(以及空格,如果它們導致問題),所以我可以將它傳遞給命令。下面的腳本是:轉義文件名中的括號
#Load all jpgs into an array. @pix = `ls *.JPG`; foreach $pix (@pix) { #Let you know it's working print "Processing photo ".$pix; $pix2 = $pix; $pix2 =~ \Q$pix\E; # Problem line #Use the program exiv2 to rename the file with timestamp system("exiv2 -r %Y_%m%d_%H%M%S $pix2"); }
的錯誤是這樣的:
Can't call method "Q" without a package or object reference at script.sh line [problem line].
這是我第一次用正則表達式,所以我在尋找解釋做什麼的答案,以及給人一種回答。謝謝你的幫助。
字符串需要報價。 $ pix2 =「\ Q $ pix \ E」; – tadmc 2011-05-07 13:47:25
傻我。你可以告訴我以前從未使用過Perl。 – Bojangles 2011-05-07 13:49:09
請注意,您應該使用'String :: ShellQuote'而不是'\ Q ... \ E'來安全地轉義文件名,請參閱http://stackoverflow.com/q/3796682/23118。 – hlovdal 2014-12-18 14:23:23