Perl 스크립트에 명령줄 인수로 명명된 변수를 전달합니다.

Perl 스크립트에 명령줄 인수로 명명된 변수를 전달합니다.

awk-vawk -v var="value" ...다음 과 같은 플래그를 사용하여 명명된 변수를 스크립트에 전달하는 편리한 방법을 제공합니다. Perl을 사용하여 동일한 작업을 수행할 수 있습니까? 아니면 적절한 인용 등을 통해 쉘을 통해 보간해야 합니까 argv? 이 옵션은 원하는 효과를 제공할 수 있지만 부울 값에만 해당됩니다.getopts%ENV-s

답변1

추가 조사를 통해 단순히 스위치를 전환하는 대신 임의의 데이터를 전달하는 옵션을 meuh사용해 주셔서 감사합니다 . 단일 행에서 옵션을 사용하는 올바른 구문은 다음과 같습니다.-s-s

$ perl -se 'print "xyz=$xyz\n"' -- -xyz="abc"
xyz=abc

답변2

다음은 명령줄에서 awk와 유사한 변수 할당을 읽고 쉘 스크립트에서 인라인 Perl 코드를 받아들이는 방법을 보여줍니다.

# cat test.sh
perl - FS=':' GRP='50' <<'EOF'
eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift;
print "$FS\n";
print "$GRP\n";
EOF

이것이 증거입니다:

# sh test.sh
:
50

인라인, 여러 줄의 Perl 코드를 허용하는 OP 답변의 대체 형식은 다음과 같습니다.

# cat test.sh
perl -s -- - -xyz="abc" <<'EOF'
print "xyz=$xyz\n";
EOF

그리고 증명하세요:

# sh xyz.sh
xyz=abc

이 형식은 쉘 스크립트로 작성된 형식과 매우 유사하며, 코드를 별도의 파일에 넣지 않고도 awk중요한 번역된 코드를 생성된 코드로 쉽게 대체 할 수 있습니다.awka2pperl

관련 정보