2012-05-24 1 views
1

일부 매개 변수와 함께 exe를 호출하는 배치 스크립트가 있습니다.작은 따옴표와 큰 따옴표 : 유닉스와 윈도우에서 같은 동작을하는 방법?

현재 나는 그렇게 내 EXE 파일에 매개 변수를 전달하고 다음 my_cmd.exe 프로그램의 옵션

$>my_cmd.exe %* 

하나는 공간

$>my_cmd.bat --req "in: lava" (OK my prog receives in: lava) 

$>my_cmd.bat --req 'in: lava' (NOK my program receives 'in: lava') 

사용자 무관심 하나의 사용을 포함 할 수있는 인수를 따옴표 또는 큰 따옴표.

일괄 처리 스크립트 수준에서 사용되기 때문에 큰 따옴표로 작동하지만 '(작은 따옴표)를 사용하면 내 프로그램으로 전달되고 전달됩니다.

my_cmd는 다중 플랫폼이며 unix에서는 작은 따옴표와 큰 따옴표가 모두 특수 문자입니다.

플랫폼에 따라 my_cmd 프로그램에서 특정 작업을 수행하지 않으려합니다.

쉘 스크립트와 배치 스크립트에서 동일한 동작을 수행 할 수있는 방법이 있습니까? 예를 들어 일괄 처리 스크립트가 작은 따옴표를 사용하면 먹을 수 있습니까?

가장 적합한 솔루션을 알려주십시오.

많은 감사

+1

이런 종류의 문제에 대한 해결책은 두 가지 해석기를 같은 방식으로 작동시키지 않고 Windows와 Unix에있는 것을 사용하는 것입니다. 예 : Perl 또는 Ruby. 또는 Cygwin으로 전환하고 양면에서 Bash를 사용하십시오. 사실, 이것이 내가 Perl 프로그래밍을 시작했을 때입니다. – theglauber

+0

이것은 파이썬을 사용하면서 수행하지만 파이썬 프로그램에 매개 변수를 전달해야합니다. 문제는 Windows에서 옵션이 --req '인 경우입니다. lava'Python 측에 있습니다 : lava ': lava : lava. 따라서 작은 구문을 처리하기 위해 파싱 수업을 속일 필요가 있으며 만족스럽지 않습니다. – zoobert

+0

예, Windows에서의 견적 처리는 성가심입니다. "cmd /?"를 입력하십시오. 도움말 텍스트를주의 깊게 읽으십시오./s 스위치가 도움이 될 수 있습니다. – theglauber

답변

0

왜 그냥 두 배로 따옴표를 변경하지?

set args=%* 
my_cmd.exe %args:'="% 
+0

따옴표가 포함 된 문자열을 인용 할 때 어떤 일이 발생합니까? 'perl -e 'my $ var = "인용 된 문자열"; print $ var; '' –

+0

좋은 결과는 나오지 않을 것입니다. 두 따옴표는 OP가 명시한대로 특수 문자로만 사용된다고 가정하고 있습니다. –

1

Windows에서 인수 처리 (및 따옴표 붙이기, 규칙 등) 규칙은 응용 프로그램의 책임입니다. 코드에서 인용 부호가있는 모든 매개 변수를 포함하는 단일 문자열을 제외하고 다른 것을 사용하는 경우 개발 도구가 GetCommandLine의 결과에 대한 사전 처리 작업을 수행했기 때문입니다. 따라서 다른 견적 처리를 위해서는 OS가 아니라 개발 도구를 살펴 봐야합니다. 가장 좋은 방법은 직접 GetCommandLine으로 전화하여 컴파일러와 함께 제공되는 라이브러리 대신 원하는 라이브러리를 사용하는 것입니다.

즉, Windows 셸 팀은 이러한 라이브러리 중 하나를 제공했습니다. CommandLineToArgvW을 참조하십시오. 그러나 이것은 핵심 OS의 일부가 아니며이를 사용하는 것은 완전히 선택 사항입니다.

또한 배치 프로세서는 변수를 대체 할 때 따옴표를 고려합니다. 그리고 그 행동은 변경하거나 사용하지 못하게하는 것이 어렵지만 문제의 근원 인 것처럼 들리지는 않습니다.