W dokumentacji Perla perlrun (1) sugeruje uruchamianie skryptów Perla przy użyciu dwujęzycznej powłoki / nagłówka Perla:
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
Co ${1+"$@"}
znaczy Próbowałem użyć "$@"
zamiast tego (używając Bash jako / bin / sh) i wydaje się, że działa równie dobrze.
Edytować
Dwie odpowiedzi poniżej mówią, że tak powinno być ${1:+"$@"}
. Mam świadomość ${parameter:+word}
składni („Użyj wartości alternatywnej”) udokumentowanej w bash (1). Nie jestem jednak przekonany, ponieważ
Zarówno
${1+"$@"}
i"$@"
działać dobrze, nawet gdy nie ma żadnych parametrów. Jeśli utworzę simple.sh jako#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 "$@"' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
i question.sh as
#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
Mogę sprawić, by obie pracowały identycznie:
$ ./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 = [ '' ];
Korzystają również inne źródła w Internecie
${1+"$@"}
, w tym jeden haker, który zdaje się wiedzieć, co robi.
Być może ${parameter+word}
jest to nieudokumentowana alternatywna (lub przestarzała) składnia ${parameter:+word}
? Czy ktoś mógłby potwierdzić tę hipotezę?