Dalam dokumentasi Perl, perlrun (1) menyarankan meluncurkan skrip Perl menggunakan header bilingual shell / Perl:
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
Apa ${1+"$@"}
artinya Saya mencoba menggunakan "$@"
sebagai gantinya (menggunakan Bash sebagai / bin / sh), dan sepertinya berfungsi juga.
Sunting
Dua jawaban di bawah mengatakan bahwa memang seharusnya begitu ${1:+"$@"}
. Saya mengetahui ${parameter:+word}
sintaks ("Gunakan Nilai Alternatif") yang didokumentasikan dalam bash (1). Namun, saya tidak yakin, karena
Keduanya
${1+"$@"}
dan"$@"
berfungsi dengan baik, bahkan ketika tidak ada parameter. Jika saya membuat simple.sh sebagai#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 "$@"' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
dan question.sh sebagai
#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
Saya bisa membuat keduanya bekerja secara identik:
$ ./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 = [ '' ];
Sumber lain di Internet juga menggunakan
${1+"$@"}
, termasuk satu peretas yang tampaknya tahu apa yang dia lakukan.
Mungkin ${parameter+word}
sintaks alternatif (atau tidak digunakan) yang tidak didokumentasikan ${parameter:+word}
? Bisakah seseorang mengkonfirmasi hipotesis itu?