awk
-v
awk -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
중요한 번역된 코드를 생성된 코드로 쉽게 대체 할 수 있습니다.awk
a2p
perl