문제

나는 랩을하고 싶다 Perl One-Liner 배치 파일로. (사소한) 예제, 유닉스 쉘에서 다음과 같은 명령을 인용 할 수 있습니다.

perl -e 'print localtime() . "\n"'

그러나 DOS는이 유용한 오류 메시지로 다음을 질식시킵니다.

-E 라인 1에서 EOF 이전의 String Terminator " ''를 찾을 수 없습니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? .BAT 파일?

도움이 되었습니까?

해결책

Windows의 Perl 물건의 경우 가능한 한 일반 인용문을 사용하려고 노력하여 이쑤시개 증후군을 기대하지 않습니다. DOS가 필요로하는 물건에 대한 인용문을 저장합니다.

perl -e "print scalar localtime() . qq(\n)"

인쇄물 끝에 Newline이 필요한 경우 -l 스위치는 당신을 위해 그것을합니다 :

perl -le "print scalar localtime()"

스위치로 할 수있는 다른 멋진 일에 대해서는 Perlrun 선적 서류 비치.

다른 팁

Windows의 "DOS Prompt"(cmd.exe)에서는 단일 따옴표가 아닌 이중 따옴표를 사용해야합니다. 인용 된 Perl 코드 내부의 경우 Perl은 많은 옵션을 제공합니다. 셋은 다음과 같습니다.

perl -e "print localtime() . qq(\n)"
perl -e "print localtime() . $/"
perl -le "print ''.localtime()"

Perl 5.10 또는 새로 사용되는 경우 :

perl -E "say scalar localtime()"

감사합니다 JF 세바스찬댓글.

Windows NT+의 일반 배치 파일의 경우 ^ 문자는 많은 것들 (<> | &)을 피하지만 따옴표의 경우 두 배가됩니다.

C:\>perl -e "print localtime() . ""\n"""
Thu Oct  2 09:17:32 2008

첫째, DOS 쉘은 UNIQ처럼 명령 줄을 구문 분석하지 않기 때문에이에 대한 답변은 명령에 따라 다릅니다. 비교되지 않은 전체 문자열을 명령에 전달하여 분할을 수행합니다. 즉, /서브 시스템을 사용하는 경우 : 콘솔을 사용하는 경우 C 런타임은 main ()을 호출하기 전에 분할을 제공하며 대부분의 명령은 이것을 사용합니다.

응용 프로그램 이이 분할을 사용하는 경우 리터럴 이중 쿼트를 입력하는 방식은 두 배가됩니다. 그래서 당신은 할 것입니다

perl -e "print localtime() . ""\n"""

DOS에서는 Perl 명령 주변의 ""를 사용합니다. DOS 쉘은 일반 유닉스 쉘과 같은 단일 따옴표를 수행하지 않습니다.

perl -e "print localtime();"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top