Perlのドキュメントでは、perlrun(1)は、バイリンガルシェル/ Perlヘッダーを使用してPerlスクリプトを起動することを提案しています。
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
どういう${1+"$@"}
意味ですか?"$@"
代わりに(Bashを/ bin / shとして使用して)使用してみましたが、同様に機能するようです。
編集
以下の2つの回答は、にあるはずだと言っています${1:+"$@"}
。${parameter:+word}
bash(1)で文書化されている( "Use Alternate Value")構文を知っています。しかし、私は納得できません。なぜなら
両方
${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 = [ '' ];
インターネット上の他のソースもを使用して
${1+"$@"}
おり、その中にはハッカーが何をしているのかを知っているように見えるハッカーもいます。
おそらく${parameter+word}
、文書化されていない代替の(または非推奨の)構文${parameter:+word}
ですか?誰かがその仮説を確認できますか?