Perl belgelerinde, perlrun (1) iki dilli bir kabuk / Perl başlığı kullanarak Perl komut dosyalarının başlatılmasını önerir:
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
Ne ${1+"$@"}
demek istiyorsun? Bunun "$@"
yerine kullanmayı denedim (Bash / bin / sh olarak kullanıldı) ve aynı şekilde çalışıyor gibi görünüyor.
Düzenle
Aşağıdaki iki cevap, olması gerektiğini söylüyor ${1:+"$@"}
. ${parameter:+word}
Bash (1) 'de belgelenen ("Alternatif Değer Kullan") sözdiziminin farkındayım . Ancak ikna olmadım, çünkü
Her ikisi de
${1+"$@"}
ve"$@"
hiçbir parametresi olmasa bile gayet iyi çalışıyor. Simple.sh olarak oluşturursam#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 "$@"' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
ve soru olarak
#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
İkisinin de aynı şekilde çalışmasını sağlayabilirim:
$ ./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 = [ '' ];
İnternetteki diğer kaynaklar da
${1+"$@"}
, ne yaptığını biliyor gibi görünen bir bilgisayar korsanı dahil olmak üzere kullanıyor .
Belki de ${parameter+word}
belgelenmemiş bir alternatif (veya kullanımdan kaldırılmış) sözdizimi içindir ${parameter:+word}
? Birisi bu hipotezi doğrulayabilir mi?