Perl 문서에서 perlrun (1) 은 이중 언어 쉘 / Perl 헤더를 사용하여 Perl 스크립트를 시작하도록 제안합니다.
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
무슨 ${1+"$@"}
뜻입니까? "$@"
대신 Bash를 / bin / sh로 사용 하려고 시도했지만 제대로 작동하는 것 같습니다.
편집하다
아래의 두 답변은이어야한다고 말합니다 ${1:+"$@"}
. ${parameter:+word}
bash (1)에 설명 된 ( "대체 값 사용") 구문을 알고 있습니다. 그러나 나는 확신이 없다.
모두
${1+"$@"}
와"$@"
작업은 잘, 매개 변수가 없습니다 경우에도. simple.sh를 다음과 같이 만들면#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 "$@"' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
와 같이 question.sh
#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
둘 다 동일하게 작동하도록 할 수 있습니다.
$ ./question.sh $VAR1 = []; $ ./question.sh a $VAR1 = [ 'a' ]; $ ./question.sh a 'b c' $VAR1 = [ 'a', 'b c' ]; $ ./question.sh "" $VAR1 = [ '' ]; $ ./simple.sh $VAR1 = []; $ ./simple.sh a $VAR1 = [ 'a' ]; $ ./simple.sh a 'b c' $VAR1 = [ 'a', 'b c' ]; $ ./simple.sh "" $VAR1 = [ '' ];
아마도 ${parameter+word}
문서화되지 않은 대체 (또는 사용되지 않는) 구문은 ${parameter:+word}
무엇입니까? 누군가 그 가설을 확인할 수 있습니까?