วิธีเขียนสคริปต์เพื่อยอมรับอาร์กิวเมนต์บรรทัดคำสั่งจำนวนเท่าใด? (UNIX, BASH)


1

ฉันมีสคริปต์ที่ฉันต้องการยอมรับอาร์กิวเมนต์บรรทัดคำสั่งจำนวนเท่าใดก็ได้

จนถึงตอนนี้ฉันมี

ถ้า [-O $ 1]; แล้วก็
  echo "คุณเป็นเจ้าของ $ 1"
อื่น
  echo "คุณไม่ใช่เจ้าของ $ 1"
Fi

เห็นได้ชัดว่าถ้าฉันต้องการให้สคริปต์ยอมรับข้อโต้แย้งเดียวสิ่งนี้จะได้ผล แต่สิ่งที่จะใช้ได้กับจำนวนข้อโต้แย้งใด ๆ

อดีต ./script f f1 f2 f3

1
หากมีบางสิ่งตอบคำถามของคุณคุณสามารถทำเครื่องหมายเป็นคำตอบ (คลิกที่เครื่องหมายถูก)? ขอบคุณ
jtbandes

คำตอบ:


10

วิธีหนึ่งที่เป็นไปได้ในการทำสิ่งที่คุณต้องการเกี่ยวข้อง$@คืออาเรย์ของอาร์กิวเมนต์ทั้งหมดที่ส่งผ่าน

for item in "$@"; do
  if [ -O "$item" ]; then
    echo "you are the owner of $item"
  else
    echo "you are not the owner of $item"
  fi
done

3
script "arg with spaces"อืมเห็นสิ่งที่เกิดขึ้นเมื่อคุณเรียกใช้ อาจเกี่ยวข้องหรือไม่เกี่ยวข้องกับสถานการณ์ของคุณ เมื่อคุณทำเสร็จใส่ doublequotes รอบและ$@ $item
wfaulk

จุดดี. แก้ไขแล้ว.
jtbandes

3

ดีก็ขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ แต่มองเข้าไปใน$*, และ$@shift


2

"$ @" ไม่สามารถแก้ปัญหา "จำนวนอาร์กิวเมนต์ใด ๆ " ได้ มีข้อ จำกัด ในระยะเวลาที่ commandline สามารถ ( http://www.in-ulm.de/~mascheck/various/argmax/ ) วิธีที่ดีกว่าในการอ่านใน "อาร์กิวเมนต์ไม่ จำกัด " คือผ่าน STDIN:

prg_which_creates_arguments | while read a; do \
    echo "do something with $a"; \
done

เพียงแค่สร้างอาร์กิวเมนต์และไปป์พวกมันทีละตัวที่โค้ดซึ่งทำอะไรกับมัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.