En la documentación de Perl, perlrun (1) sugiere iniciar scripts de Perl utilizando un shell bilingüe / encabezado de Perl:
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
Que ${1+"$@"}
significa Intenté usar en su "$@"
lugar (usando Bash como / bin / sh), y parece funcionar igual de bien.
Editar
Dos respuestas a continuación dicen que se supone que debe ser ${1:+"$@"}
. Soy consciente de la ${parameter:+word}
sintaxis ("Usar valor alternativo") documentada en bash (1). Sin embargo, no estoy convencido, porque
Ambos
${1+"$@"}
y"$@"
funcionan bien, incluso cuando no hay parámetros. Si creo simple.sh como#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 "$@"' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
y question.sh como
#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
Puedo hacer que ambos trabajen de manera idéntica:
$ ./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 = [ '' ];
También utilizan otras fuentes en Internet
${1+"$@"}
, incluido un hacker que parece saber lo que está haciendo.
¿Quizás ${parameter+word}
es una sintaxis alternativa (o obsoleta) no documentada ${parameter:+word}
? ¿Alguien podría confirmar esa hipótesis?