Bash: ชิ้นส่วนของพารามิเตอร์ตำแหน่ง


20

ฉันจะรับส่วนแบ่ง$@ใน Bash โดยไม่ต้องคัดลอกพารามิเตอร์ตำแหน่งทั้งหมดไปยังอาร์เรย์อื่นเช่นนี้ได้อย่างไร

argv=( "$@" )
echo "${argv[@]:2}";

1
"$@"อ้างเสมอ การargvมอบหมายของคุณจะผิดพลาดหากมีสิ่งใดที่มีช่องว่าง
jordanm

คำตอบ:


31

คุณสามารถใช้รูปแบบเดียวกันกับอาเรย์อื่น ๆ ในการแยกองค์ประกอบที่ 2 และ 3 จาก$@คุณต้องทำ:

echo "${@:1:2}"
          - -
          | |----> slice length
          |------> slice starting index 

1
แต่สิ่งนี้ดูเหมือนจะทำงานบน char โดย char char ใน v4.1.2 มีวิธีที่จะทำมันด้วยคำต่อคำ?
Alexej Magura

@AlexejMagura ฉันไม่เข้าใจว่าคุณหมายถึงอะไร ที่ทำหน้าที่เกี่ยวกับองค์ประกอบของอาเรย์ หากคุณมีองค์ประกอบหนึ่งตัวละครมันจะทำงาน "กับตัวละคร" หากองค์ประกอบแต่ละคำเป็นคำที่ใช้กับคำ คุณอาจจะลองสิ่งนี้ในสตริงและไม่ใช่อาร์เรย์หรือไม่?
terdon

ฉันลองใช้สำเนา "$ @" ซึ่งฉันคิดว่าอาจกลายเป็นสตริงในตอนนั้นฉันไม่แน่ใจ
Alexej Magura

เมื่อวันที่ทุบตี 4.2.46, "${@:1:2}"จริงให้ฉันที่ 1และครั้งที่ 2 อาร์กิวเมนต์บรรทัดคำสั่ง ในขณะเดียวกัน"${@:1}"ให้ฉันอาร์กิวเมนต์บรรทัดคำสั่งเต็มรูปแบบและ"${@:0}"ให้ฉันชื่อสคริปต์ตามด้วยอาร์กิวเมนต์บรรทัดคำสั่งเต็มรูปแบบ
Rockallite

@Rockallite กันใช่ องค์ประกอบที่ 2 และ 3 ของ$@ อาร์เรย์เป็นอาร์กิวเมนต์ที่ 1 และ 2 "${@:1}"จะพิมพ์ทั้งอาร์เรย์เริ่มต้นด้วยองค์ประกอบที่ 2 (อาร์กิวเมนต์ที่ 1) และ${@:0}อาร์เรย์ทั้งหมดที่เริ่มต้นจากองค์ประกอบที่ 1 ซึ่งเป็นชื่อของสคริปต์ คุณคาดหวังอะไร
terdon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.