วิธีจัดการพารามิเตอร์มากกว่า 10 ตัวในเชลล์


103

ฉันใช้ bash shell บน linux และต้องการใช้พารามิเตอร์มากกว่า 10 ตัวในเชลล์สคริปต์


8
โปรดทราบว่าการมีพารามิเตอร์ 10 ตัวจะทำให้ค่อนข้างสับสน บางทีอาจจะดีกว่าถ้าใช้ตัวเลือก (เช่น-a 1หรือ--foo=bar) แทน ดูman getopt, man getoptsและman bashสำหรับบางตัวเลือกสำหรับการทำว่า
Mikel

คำตอบ:


160

ใช้วงเล็บปีกกาเพื่อปิด:

echo "${10}"

คุณยังสามารถวนซ้ำพารามิเตอร์ตำแหน่งเช่นนี้:

for arg

หรือ

for arg in "$@"

หรือ

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
โปรดทราบว่า $ {10} จะใช้งานได้ใน bash แต่จะ จำกัด ความสามารถในการพกพาของคุณเนื่องจากการใช้งาน sh จำนวนมากอนุญาตเฉพาะข้อมูลจำเพาะตัวเลขหลักเดียว
William Pursell

1
@ วิลเลียม: มีเชลล์บางตัวที่ไม่ยอมรับเช่นเชลล์ Bourne ดั้งเดิม แต่นอกเหนือจากเชลล์ที่ฉันระบุไว้ในความคิดเห็นอื่น (Bash, dash, ksh และ zsh) มันยังทำงานใน csh, tcsh และเถ้า Busybox
หยุดชั่วคราวจนกว่าจะมีประกาศอีกครั้ง

1
@WilliamPursell ${10}กำหนดโดย POSIX
Steven Penny

2
การกังวลเกี่ยวกับ${10}การทำงานเป็นสิ่งที่จำเป็นเมื่อใช้การใช้งานที่เก่ามากซึ่งไม่เป็นไปตามมาตรฐานเท่านั้น อาจเป็นเพียงความสนใจทางประวัติศาสตร์ ... แต่ฉันยังไม่เคยใช้เลย! ฉันคิดว่าเพราะแนวทางปฏิบัติที่ดีที่สุดกำหนดว่าข้อโต้แย้ง 10 ข้อนั้นมีมากเกินไปเว้นแต่ว่าจะมีการทำซ้ำซึ่งในกรณีนี้คุณจะต้องทำซ้ำ"$@"มากกว่าการแจกแจง
William Pursell

23

คุณสามารถมีพารามิเตอร์ได้ถึง 256 พารามิเตอร์ตั้งแต่ 0 ถึง 255 ด้วย:

${255}

5
ฉันคิดว่าขีด จำกัด นั้นขึ้นอยู่กับเปลือก Bash, dash, ksh และ zsh ดูเหมือนจะไม่มี sh -c 'echo ${333}' /usr/bin/*
หยุดชั่วคราวจนกว่าจะมีประกาศอีกครั้ง

3
เปลือกของฉันสูงถึง 2 ล้านอย่างสบาย ๆset $(seq 2097152); echo ${2097152}
Steven Penny
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.