Dans la documentation Perl, perlrun (1) suggère de lancer les scripts Perl à l'aide d'un en-tête shell / Perl bilingue:
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
Qu'est-ce que ça ${1+"$@"}
veut dire? J'ai essayé d'utiliser à la "$@"
place (en utilisant Bash comme / bin / sh), et cela semble fonctionner aussi bien.
modifier
Deux réponses ci-dessous indiquent que c'est supposé l'être ${1:+"$@"}
. Je connais la ${parameter:+word}
syntaxe ("Use Alternate Value") décrite dans bash (1). Cependant, je ne suis pas convaincu, car
Les deux
${1+"$@"}
et"$@"
fonctionnent très bien, même quand il n'y a pas de paramètres. Si je crée simple.sh en tant que#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 "$@"' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
et question.sh comme
#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
Je peux obtenir les deux travailler à l'identique:
$ ./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 = [ '' ];
D'autres sources sur Internet utilisent également
${1+"$@"}
, y compris un pirate qui semble savoir ce qu'il fait.
Peut ${parameter+word}
- être une syntaxe alternative non documentée (ou obsolète) pour ${parameter:+word}
? Quelqu'un pourrait-il confirmer cette hypothèse?