2009-09-09 5 views
0

필자는 bash의 "$ @"능력과 비슷한 인용 부호를 입력하지 않고도 명령 줄에 입력 된 문자열을 캡처하고자하는 Perl 스크립트 작업을하고 있습니다. 나는이 명령을 꽤 사용할 것이므로 이것이 가능할 것으로 기대하고있다. 내가 가지고있는 경우 :

if ($ARGV) { 

나는 커맨드 라인 문자열을 따옴표로 묶어야한다. 차라리 다음과 같은 명령을 사용합니다.

htmlencode some & HTML <> entities 

따옴표없이. Perl에서이 작업을 수행 할 수있는 방법이 있습니까?

+2

&, < and >은 펄을 사용하기 전에 쉘에 의해 해석되지 않습니까? – dlamblin

+1

나는 $ ARGV [0]을 의미한다고 생각한다; $ ARGV는 다른 것입니다. – ysth

+0

질문 제목에 [Invalid]를 넣으면 RSS 피드가 업데이트됩니다. 질문이 유효하지 않다고 생각되면 질문의 왼쪽 하단에있는 편집 및 깃발 링크 옆에있는 닫기 링크를 클릭하십시오. –

답변

4

@ARGV 배열에는 Perl 스크립트에 대한 인수가 들어 있습니다. 따옴표는 필요하지 않습니다. 나는 따옴표 명령 줄 문자열을 넣어야 할

:에 대해 말했다

는 질문을 묻습니다. 차라리 다음과 같은 명령을 사용합니다.

htmlencode some & HTML <> entities 

따옴표없이. 펄에서 이것을 할 수있는 방법이 있습니까? 그 해석에서 쉘을 방지하기 위해 '&'와 '<>을'탈출 의미 - 표시된 명령은 쉘 명령 행에서 작성된 경우

글쎄, 당신은 쉘 규칙을 준수해야합니다. 마찬가지로 Perl 스크립트 내에서 해당 시퀀스는 Perl로부터 보호되어야합니다. 이다

system "htmlencode", "some", "&", "HTML", "<>", "entities"; 

은, 모든 따옴표에있을 것이다 -하지만 표기는 쉘을 실행하고 쉘이 명령을 해석하는 것을 피하기 것입니다 : 어쩌면 당신은 쓸 것입니다. 당신이 (배열이로드 될 때 따옴표) 배열에 인수를 넣으면 다시 또는

, 당신은 system에 그 배열을 전달하고 따옴표를 사용하지 수 :

my @args = ("htmlencode", "some", "&", "HTML", "<>", "entities"); 
system @args; 

을하지만 질문이 혼란 스럽다고 생각하십시오.

3

[email protected] 주위에 따옴표를 bash로 넣어서 배열의 각 요소를 인용 부호가있는 것으로 확장합니다. 그 이유는 배열의 각 요소를 모두 다음 명령에 전달할 때 단일 인수로 계속 처리되기 때문입니다.

Perl에서와 유사한 것은 해당 매개 변수를 다른 외부 명령에 전달하려는 경우입니다. 역 따옴표 연산자를 사용하여 외부 프로그램을 실행하는 경우 각 매개 변수를 인용해야하지만 system을 사용하면 Perl은 모든 매개 변수를 별도로 유지 관리합니다.

실제로 개별 매개 변수는 프로그램이 유닉스에서 실행되는 방식입니다. 명령 줄에 입력 할 수 있어야하기 때문에 단일 문자열 명령 줄 형식이 있습니다. 모든 쉘과 마찬가지로 bash has special rules은 단일 문자열을 여러 인수로 분할하는 방법에 대해 설명합니다. 그러나 이미 Perl 배열로 분리 된 경우에는 다시 단일 문자열로 바꾸지 마십시오. 그들을 따로 보관하십시오.

+0

의견을 주셔서 감사합니다. 스크립트가 먼저 실행되고 "some & HTML <> entities"배열을 가져 와서 실행하기 전에 각각 하나의 인수로 처리하지 않는다고 생각 했었습니다. 나는 이것을 삭제할 것이지만 거기에는 좋은 코멘트가있다. 도움을 감사하십시오. – user148813

관련 문제