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?