ในเอกสารประกอบ Perl, perlrun (1)แนะนำการเรียกใช้สคริปต์ Perl โดยใช้ส่วนหัวของสองภาษาเชลล์ / Perl:
#!/bin/sh
#! -*-perl-*-
eval 'exec perl -x -wS $0 ${1+"$@"}'
if 0;
อะไร${1+"$@"}
หมายถึง? ฉันลองใช้"$@"
แทน (โดยใช้ Bash เป็น / bin / sh) และดูเหมือนว่าจะใช้งานได้เช่นกัน
แก้ไข
${1:+"$@"}
สองคำตอบด้านล่างบอกว่ามันควรจะเป็น ฉันรับรู้ถึง${parameter:+word}
ไวยากรณ์ ("ใช้ค่าทางเลือก") ที่ระบุไว้ใน bash (1) อย่างไรก็ตามฉันไม่มั่นใจเพราะ
ทั้งสองอย่าง
${1+"$@"}
และใช้"$@"
งานได้ดีแม้ว่าจะไม่มีพารามิเตอร์ก็ตาม ถ้าฉันสร้าง simple.sh เป็น#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 "$@"' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
และ question.sh เป็น
#!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 ${1+"$@"}' if 0; #!perl use Data::Dumper; print Dumper(\@ARGV);
ฉันสามารถทำให้ทั้งคู่ทำงานเหมือนกัน:
$ ./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 = [ '' ];
แหล่งข้อมูลอื่นบนอินเทอร์เน็ตยังใช้
${1+"$@"}
รวมถึงแฮ็กเกอร์หนึ่งคนที่ดูเหมือนจะรู้ว่าเขากำลังทำอะไรอยู่
อาจ${parameter+word}
จะเป็นไวยากรณ์ทางเลือก (หรือเลิกใช้) ทางเลือกที่ไม่มีเอกสาร${parameter:+word}
หรือ มีคนยืนยันสมมติฐานนั้นได้ไหม