다음과 같은 파일이 있습니다. 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
어리석은 나를. 내가 전에 Perl을 사용한 적이 없다고 말할 수 있습니다. – Bojangles
파일 이름을 안전하게 이스케이프하기 위해'\ Q ... \ E'가 아닌'String :: ShellQuote'를 사용해야 함을주의하십시오. http://stackoverflow.com/q/3796682/23118. – hlovdal