คำถามติดแท็ก array

อาร์เรย์เป็นโครงสร้างข้อมูลที่ง่ายที่สุดสำหรับการจัดเก็บรายการในหน่วยความจำอย่างต่อเนื่อง

5
มีวิธีอ่านองค์ประกอบสุดท้ายของอาร์เรย์ที่มี bash หรือไม่?
ถ้าฉันมีอาร์เรย์ที่มี 5 องค์ประกอบตัวอย่างเช่น: [a][b][c][d][e] ใช้echo ${myarray[4]}ฉันสามารถดูสิ่งที่มันถือ แต่ถ้าฉันไม่ทราบจำนวนองค์ประกอบในอาร์เรย์ที่กำหนดล่ะ มีวิธีอ่านองค์ประกอบสุดท้ายของอาร์เรย์ความยาวที่ไม่รู้จักหรือไม่? เช่นองค์ประกอบแรกอ่านจากขวาไปซ้ายสำหรับอาร์เรย์ใด ๆ ฉันต้องการทราบวิธีการทำเช่นนี้ในทุบตี
68 bash  array 

2
วิธีการนับความยาวของอาร์เรย์ที่กำหนดไว้ในทุบตี?
ฉันใหม่เพื่อทุบตีและไม่สามารถหาบทช่วยสอนที่ดีเพื่อตอบคำถามของฉัน array=( item1 item2 item3) for name in ${array[@]}; do echo current/total ... some other codes done ฉันต้องการคำนวณค่า "ปัจจุบัน" และ "รวม" ตามที่คาดหวังเอาท์พุทของสิ่งนี้: 1/3 2/3 3/3 ขอบคุณสำหรับเคล็ดลับใด ๆ
57 bash  array 

4
ฉันจะลบองค์ประกอบออกจากอาร์เรย์ได้อย่างไร
unset array[0]เอาองค์ประกอบ แต่ถ้าฉันจะecho ${array[0]}ได้รับค่า Null นอกจากนี้ยังมีวิธีอื่นในการทำเช่นนี้ แต่ถ้าองค์ประกอบของอาร์เรย์มีช่องว่างเช่นด้านล่าง array[0]='james young' array[1]='mary' array[2]='randy orton' แต่สิ่งเหล่านี้ก็ไม่สามารถทำงานได้เช่นกัน array=${array[@]:1} #removed the 1st element ตอนนี้ฉันต้องการอาร์เรย์ใหม่ให้เป็นเหมือน array[0]='mary' array[1]='randy orton' ช่องว่างทำให้เกิดปัญหาหลังจากการกำหนดและอาร์เรย์ที่แท้จริงกลายเป็นเหมือนการทดแทน array=(mary randy orton)

3
วิธีการเพิ่ม / ลบองค์ประกอบไปยัง / จากอาร์เรย์ในทุบตี?
ฉันมีอาร์เรย์ที่มีองค์ประกอบบางอย่าง แต่ฉันต้องการผลักดันรายการใหม่ไปยังจุดเริ่มต้นของอาร์เรย์ ฉันจะทำอย่างไร

3
แปลงอาร์เรย์เป็นอาร์กิวเมนต์ของคำสั่งหรือไม่?
ฉันมีอาร์เรย์ของ "ตัวเลือก" ของคำสั่ง my_array=(option1 option2 option3) ฉันต้องการเรียกคำสั่งนี้ในสคริปต์ทุบตีโดยใช้ค่าจากอาร์เรย์เป็นตัวเลือก ดังนั้นcommand $(some magic here with my_array) "$1"กลายเป็น: command -option1 -option2 -option3 "$1" ฉันจะทำมันได้อย่างไร เป็นไปได้ไหม?
39 bash  parameter  array 

3
`ข้อผิดพลาดทางไวยากรณ์:“ (” ไม่คาดคิด” เมื่อสร้างอาร์เรย์
ฉันมีเซิร์ฟเวอร์ Linux (Debian) สองตัว ฉันกำลังสร้างเชลล์สคริปต์ ในครั้งแรกที่ฉันสร้างอาร์เรย์ดังนี้: #!/bin/bash target_array=( "/home/user/direct/filename -p123 -r" ) มันใช้งานได้ดี แต่เมื่อฉันเรียกใช้บนเซิร์ฟเวอร์อื่นฉันจะได้รับ: Syntax error: "(" unexpected เท่าที่ฉันสามารถบอกได้ว่าเซิร์ฟเวอร์ทั้งสองนั้นเหมือนกัน มีใครบ้างไหมที่จะเข้าใจว่าทำไมสิ่งนี้ถึงไม่ได้ผล? ถ้าฉันพิมพ์ลงในเทอร์มินัลโดยตรงก็ดี มันจะปรากฏว่าเมื่อฉันเรียกใช้เป็น sh scriptname.sh ฉันได้รับข้อผิดพลาด แต่ถ้าฉันเรียกใช้เป็น ./scriptname.sh ดูเหมือนว่าจะโอเค ความแตกต่างคืออะไร?

2
มีเหตุผลที่องค์ประกอบแรกของอาร์เรย์ Zsh ถูกจัดทำดัชนีโดย 1 แทน 0 หรือไม่?
จากประสบการณ์ของฉันกับการเขียนโปรแกรมที่ทันสมัยและภาษาสคริปต์ฉันเชื่อว่าโปรแกรมเมอร์ส่วนใหญ่คุ้นเคยกับการอ้างอิงถึงองค์ประกอบแรกของอาร์เรย์โดย0เป็นดัชนี มีข้อดีอย่างมากในการใช้1หรือไม่? ฉันแน่ใจว่าฉันได้ยินภาษาอื่นมากกว่า Zsh ที่มีพฤติกรรมคล้ายกันกับอาร์เรย์ ฉันสบายดีเพราะมันสะดวกสบายไม่แพ้กัน อย่างไรก็ตามเมื่อก่อนหน้านี้มีการเปิดตัวและใช้กันอย่างแพร่หลายในภาษาสคริปต์เชลล์เช่น ksh และ bash ทั้งหมดใช้ 0 เหตุใดจึงมีคนเลือกที่จะเปลี่ยน "มาตรฐาน" ทั่วไปนี้ คำตอบสำหรับคำถามของฉันจะเป็น "ไม่แน่นอน"; จากนั้นคำอธิบายเดียวที่ฉันนึกได้เกี่ยวกับเรื่องนี้คือ "คุณสมบัติพิเศษ" สำหรับหอยคือ " พวกเขาทำสิ่งนี้เพื่ออวดเปลือกหอยที่สวยงามกว่านี้อีกเล็กน้อย" ฉันไม่รู้มากทั้ง Zsh หรือประวัติของมันและมีโอกาสสูงที่ฉันจะรู้ทฤษฎีเกี่ยวกับเรื่องนี้ไม่สมเหตุสมผล มีคำอธิบายสำหรับเรื่องนี้? หรือมันเป็นแค่รสนิยมส่วนตัว?
27 zsh  history  array 

4
อาร์เรย์ใน Unix Bourne Shell
ฉันพยายามใช้อาร์เรย์ใน Bourne shell ( /bin/sh) ฉันพบว่าวิธีการเริ่มต้นองค์ประกอบอาร์เรย์คือ: arr=(1 2 3) แต่พบข้อผิดพลาด: syntax error at line 8: `arr=' unexpected ตอนนี้โพสต์ที่ฉันพบไวยากรณ์นี้บอกว่ามันมีไว้สำหรับbashแต่ฉันไม่สามารถหาไวยากรณ์ที่แยกต่างหากสำหรับเชลล์เป้าหมาย ไวยากรณ์มีความเหมือน/bin/shกันหรือไม่

1
มีวิธีรายการ 'ดัชนีรหัส' (กุญแจ) ทั้งหมดในตัวแปรอาเรย์ของ bash หรือไม่
ฉันมีชุดนี้: declare -A astr ฉันเพิ่มองค์ประกอบเข้าไป: astr[elemA]=123 astr[elemB]=199 แต่ต่อมาฉันต้องรู้ว่า ID ดัชนี (elemA และ elemB) คืออะไรและแสดงรายการเหล่านั้น echo "${astr[@]}" #this only get me the values...
26 bash  array 

3
ข้อผิดพลาดที่เป็นไปได้ใน Bash?: foo () {echo“ $ {var [0]}”; }; var = (bar baz) foo
ระบบปฏิบัติการ : Ubuntu 16.04.3 เชลล์ : ทุบตี 4.3.48 ฉันรู้ว่าเป็นไปได้ที่จะเปลี่ยนแปลงเนื้อหาของตัวแปรชั่วคราวในvar=value commandซึ่งอาจIFS= read -r varเป็นกรณีที่น่าสังเกตมากที่สุดของเรื่องนี้ และด้วยวิกิของเกร็กฉันก็เข้าใจเช่นกัน: # Why this foo() { echo "$var"; } var=value foo # And this does work var=value; echo "$var" # But this doesn't var=value echo "$var" สิ่งนี้ทำให้ฉันเข้าใจได้: $ foo() { echo "${var[0]}"; } $ var=(bar baz) foo …
22 bash  array 


1
ลบอาร์เรย์ใน awk
ใน awk ฉันสามารถล้างอาเรย์ด้วยลูปทำให้เป็นอาเรย์ที่ว่างเปล่าซึ่งเทียบเท่ากับการลบมัน for (key in array) delete array[key]; มีวิธีที่ง่ายกว่านี้ไหม? ฉันสามารถลบอาร์เรย์ทั้งหมดเพื่อให้สามารถใช้ชื่อตัวแปรสำหรับสเกลาร์ได้หรือไม่
18 awk  array 

2
การดำเนินการประเภทใด / # / - ใน“ $ {my_array [@] / # / -}”?
คำตอบที่ได้รับการยอมรับในการแปลงอาร์เรย์เป็นอาร์กิวเมนต์ของคำสั่ง? ใช้คำสั่ง Bash ต่อไปนี้: command "${my_array[@]/#/-}" "$1" ฉันพยายามที่จะคิดออกว่า/#/-ส่วนทำอย่างไร น่าเสียดายที่ฉันไม่รู้จะเรียกมันว่าอะไรดังนั้นฉันมีปัญหาในการค้นหาเอกสารใด ๆ ฉันดูในหน้า Bash man page ในอาร์เรย์และเว็บไซต์ไม่กี่แห่ง แต่ไม่พบอะไรเลย
17 bash  array 

5
การเชื่อมโยงอาเรย์ของ BASH
มีวิธีพิมพ์อาร์เรย์ทั้งหมด ([คีย์] = ค่า) โดยไม่วนรอบองค์ประกอบทั้งหมดหรือไม่ สมมติว่าฉันได้สร้างอาร์เรย์ที่มีองค์ประกอบบางอย่าง: declare -A array array=([a1]=1 [a2]=2 ... [b1]=bbb ... [f500]=abcdef) ฉันสามารถพิมพ์อาเรย์ทั้งหมดด้วย for i in "${!array[@]}" do echo "${i}=${array[$i]}" done อย่างไรก็ตามดูเหมือนว่าทุบตีรู้วิธีการรับองค์ประกอบอาร์เรย์ทั้งหมดใน "ไป" - คีย์ทั้งสอง ${!array[@]}${array[@]}และค่านิยม มีวิธีในการทุบตีพิมพ์ข้อมูลนี้โดยไม่วนซ้ำหรือไม่? แก้ไข: typeset -p arrayทำอย่างนั้น! อย่างไรก็ตามฉันไม่สามารถลบทั้งคำนำหน้าและคำต่อท้ายในการทดแทนเดียว: a="$(typeset -p array)" b="${a##*(}" c="${b%% )*}" มีวิธีที่สะอาดกว่าในการรับ / พิมพ์เฉพาะส่วน key = value ของเอาต์พุตหรือไม่?


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