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

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

8
วิธีการทดสอบว่าองค์ประกอบอาร์เรย์มีความเท่าเทียมกันในการทุบตี?
อาร์เรย์ต่อไปนี้แสดงจำนวนดิสก์ในเครื่อง linux แต่ละเครื่อง แต่ละอาร์เรย์เดียวรวมถึงจำนวนของดิสก์ในที่เครื่องลินุกซ์ echo ${ARRAY_DISK_Quantity[*]} 4 4 4 4 2 4 4 4 วิธีง่ายๆในการระบุว่าทุกค่าของอาร์เรย์มีค่าเท่ากัน? สถานะที่ดี: 4 4 4 4 4 4 4 4 สถานะไม่ดี: 4 4 4 4 4 4 2 4 สถานะไม่ดี: 6 6 6 6 6 6 6 6 6 6 2 6 2
15 bash  shell-script  awk  array 

5
ฉันจะทดสอบว่ารายการอยู่ในอาร์เรย์ทุบตีได้อย่างไร
ช่วยสคริปต์ง่าย ๆ #!/bin/bash array1=( prova1 prova2 slack64 ) a="slack64" b="ab" if [ $a = $b ] then echo "$a = $b : a is equal to b" else echo "$a = $b: a is not equal to b" fi สคริปต์นี้ใช้งานไม่ได้ฉันต้องการสคริปต์ที่ตรวจสอบว่า slack64 มีอยู่ในรายการ (ฉันใช้อาร์เรย์) และให้ฉันใช่มีอยู่หรือไม่ ฉันไม่รู้วิธีเปรียบเทียบอาเรย์กับตัวแปรตัวเดียว
15 bash  array 

1
อะไรคือความแตกต่างระหว่าง @ และ * เมื่ออ้างอิงค่า bash array?
คู่มือ Bash นี้พูดว่า: หากหมายเลขดัชนีคือ @ หรือ * สมาชิกทั้งหมดของอาร์เรย์จะถูกอ้างอิง เมื่อฉันทำสิ่งนี้: LIST=(1 2 3) for i in "${LIST[@]}"; do echo "example.$i " done ให้: example.1 example.2 example.3(ผลลัพธ์ที่ต้องการ) แต่เมื่อฉันใช้${LIST[*]}ฉันได้รับexample.1 2 3แทน ทำไม? แก้ไข: เมื่อใช้ printf, @ และ * จริงจะให้ผลลัพธ์เดียวกัน
15 bash  array 

4
แยกหนึ่งฟิลด์จากอาร์เรย์ JSON เป็นอาร์เรย์ทุบตี
ฉันมีเอาต์พุต JSON ที่มีรายการของวัตถุที่เก็บอยู่ในตัวแปร (ฉันอาจไม่ได้ใช้ถ้อยคำที่ถูกต้อง) [ { "item1": "value1", "item2": "value2", "sub items": [ { "subitem": "subvalue" } ] }, { "item1": "value1_2", "item2": "value2_2", "sub items_2": [ { "subitem_2": "subvalue_2" } ] } ] ฉันต้องการค่าทั้งหมดสำหรับ item2 ในอาร์เรย์เพื่อให้สคริปต์ bash ทำงานบน ubuntu 14.04.1 ฉันได้พบวิธีมากมายในการรับผลลัพธ์ทั้งหมดลงในอาร์เรย์ แต่ไม่ใช่รายการที่ฉันต้องการ

1
ความแตกต่างระหว่าง $ path กับ $ PATH (ตัวพิมพ์เล็กกับตัวพิมพ์ใหญ่) กับ zsh คืออะไร
ในFreeBSD 12 การใช้zshเชลล์ฉันสังเกตเห็นความแตกต่างนี้เมื่อดู$path(ตัวพิมพ์เล็ก) กับ$PATH(ตัวพิมพ์ใหญ่) echo $path / sbin / bin / usr / sbin / usr / bin / usr / local / sbin / usr / local / bin / usr / home / freebsd / bin echo $PATH sbin /: / bin: / usr / sbin: / usr …
13 zsh  variable  path  array 

3
วิธีการพอร์ตไปยังสไตล์ทุบตีเพื่อเถ้า?
ashบางเวลาที่ผ่านมาฉันได้เขียนสคริปต์ทุบตีซึ่งขณะนี้ควรจะสามารถที่จะทำงานในสภาพแวดล้อมที่มี ในbashมันเป็นเหมือน: services=( "service1.service" "service2.service" "service3.service" ) for service in "${services[@]}" do START $service done START() { echo "Starting "$1 systemctl start $1 } ในความเป็นจริงมีบริการอยู่ 40 รายการและฉันต้องการทำให้การเปลี่ยนแปลงนี้ไม่เจ็บปวดและสะอาดเท่าที่จะเป็นไปได้ มีการใช้bashisms เสมอ ตอนนี้ฉันกำลังเหน็บแนมกับงานเพื่อให้สคริปต์พกพาได้มากขึ้น สำหรับเหตุผลในการพกพาอาจเป็นเรื่องดีที่จะมีashโซลูชันที่บริสุทธิ์ แต่เนื่องจากฉันมีความแข็งแกร่งbusyboxในการจัดการของฉันฉันอาจเสียสละบางพกพา เฉพาะในกรณีที่ความสามารถในการอ่านดีขึ้นมากเนื่องจากสคริปต์ "clean" เป็นเมตริกเช่นกัน ในกรณีนี้โซลูชันแบบพกพาและสะอาดจะเป็นอย่างไร
13 bash  shell  array  ash 

4
สคริปต์ Bash รอกระบวนการและรับรหัสส่งคืน
ฉันพยายามสร้างสคริปต์ซึ่งจะเริ่มคำสั่งพื้นหลังจำนวนมาก สำหรับแต่ละคำสั่งพื้นหลังฉันต้องได้รับรหัสส่งคืน ฉันลองใช้สคริปต์ต่อไปนี้แล้ว: #!/bin/bash set -x pid=() return=() for i in 1 2 do echo start $i ssh mysql "/root/test$i.sh" & pid[$i]=$! done for i in ${#pid[@]} do echo ${pid[$i]} wait ${pid[$i]} return[$i]=$? if [ ${return[$i]} -ne 0 ] then echo mail error fi done echo ${return[1]} echo ${return[2]} ปัญหาของฉันอยู่ระหว่างการรอลูปถ้า …
13 linux  bash  process  array 

5
จุดตัดของสองอาร์เรย์ใน BASH
ฉันมีสองอาร์เรย์ดังนี้: A=(vol-175a3b54 vol-382c477b vol-8c027acf vol-93d6fed0 vol-71600106 vol-79f7970e vol-e3d6a894 vol-d9d6a8ae vol-8dbbc2fa vol-98c2bbef vol-ae7ed9e3 vol-5540e618 vol-9e3bbed3 vol-993bbed4 vol-a83bbee5 vol-ff52deb2) B=(vol-175a3b54 vol-e38d0c94 vol-2a19386a vol-b846c5cf vol-98c2bbef vol-7320102b vol-8f6226cc vol-27991850 vol-71600106 vol-615e1222) อาร์เรย์ไม่ถูกเรียงลำดับและอาจมีองค์ประกอบที่ซ้ำกัน ฉันต้องการสร้างจุดตัดของทั้งสองอาร์เรย์และเก็บองค์ประกอบไว้ในอาร์เรย์อื่น ฉันจะทำอย่างไร นอกจากนี้ฉันจะดูรายการองค์ประกอบที่ปรากฏใน B และไม่มีใน A ได้อย่างไร
12 bash  scripting  array 


2
ทดสอบการรองรับอาร์เรย์โดยเชลล์
มีวิธีรัดกุมในการทดสอบเพื่อสนับสนุนอาร์เรย์โดยเชลล์คล้าย Bourne ในบรรทัดคำสั่งหรือไม่ สิ่งนี้เป็นไปได้เสมอ: $ arr=(0 1 2 3);if [ "${arr[2]}" != 2 ];then echo "No array support";fi หรือการทดสอบ$SHELLและรุ่นเปลือก: $ eval $(echo "$SHELL --version") | grep version จากนั้นอ่าน man page โดยสมมติว่าฉันสามารถเข้าถึงได้ (ถึงตรงนั้น, เขียนจาก/bin/bash, ฉันสมมติว่าเชลล์เหมือนบอร์นทั้งหมดยอมรับตัวเลือกแบบยาว--version, เมื่อแบ่งเช่น ksh เป็นต้น ) ฉันกำลังมองหาการทดสอบอย่างง่ายที่อาจไม่ต้องใส่ข้อมูลและรวมไว้ในส่วนการใช้งานที่จุดเริ่มต้นของสคริปต์หรือแม้กระทั่งก่อนที่จะเรียกมัน

3
ไปจาก String ไปยัง Array ของ "words" ใน Bash
ฉันต้องไปจากสตริงไปยังอาร์เรย์ที่แต่ละรายการเป็นแต่ละคำในสตริงนั้น ตัวอย่างเช่นเริ่มต้นด้วย: VotePedro="Vote for Pedro" ฉันต้องการอาร์เรย์: Vote For Pedro ซึ่งฉันควรจะสามารถย้ำกว่าเป็น: for i in "${votePedroArray[@]}" do ## Do something done

2
นับจำนวนองค์ประกอบในอาร์เรย์ทุบตีที่ชื่อของอาร์เรย์เป็นแบบไดนามิก (เช่นเก็บไว้ในตัวแปร)
คำชี้แจงสั้น ๆ ของคำถาม: มีวิธีการทุบตีในตัวเพื่อนับจำนวนขององค์ประกอบในอาร์เรย์ทุบตีที่ชื่อของอาร์เรย์เป็นแบบไดนามิก (เช่นเก็บไว้ในตัวแปร) โดยไม่ต้องหันไปทำสำเนาอย่างเต็มที่ของอาร์เรย์หรือใช้eval? ข้อมูลมากกว่านี้: การใช้การแทนที่พารามิเตอร์ bash สามารถทำได้ดังนี้: myArr=(A B C); echo ${#myArr[@]}กำหนดความยาวของอาร์เรย์: การอ้างอิงตัวแปรทางอ้อมโดยใช้ชื่อ: NAME=myVar; echo ${!NAME}(สิ่งนี้ยังใช้กับองค์ประกอบอาร์เรย์): NAME=myArr[1]; echo ${!NAME} แต่ถ้าชื่อของอาเรย์ถูกเก็บไว้ในตัวแปรอีกตัวหนึ่งจะกำหนดจำนวนขององค์ประกอบในอาเรย์ได้อย่างไร? (หนึ่งอาจพิจารณาว่าเป็นการรวมกันของการแทนที่พารามิเตอร์สองตัวด้านบน) ตัวอย่างเช่น: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What …

1
วงเล็บเดียวในการกำหนดตัวแปร bash
ฉันสงสัยเกี่ยวกับวงเล็บเดี่ยวในทุบตี ฉันรู้ว่าพวกเขาจะใช้สำหรับการดำเนินการคำสั่งใน subshells และพวกเขาจะใช้สำหรับการสร้างอาร์เรย์ แต่พวกเขาจะใช้เพื่ออะไรอย่างอื่น? สิ่งหนึ่งที่ดึงดูดความสนใจของฉันคือเมื่อคุณใช้ในการกำหนดตัวแปรเช่น var=(hello) echo $var # hello ทุบตีไม่ได้สร้างข้อผิดพลาดหรืออะไรและผลลัพธ์จะเหมือนกับว่า var=hello นิยามตัวแปรทั้งสองนี้เหมือนกันหรือมีความแตกต่างกันหรือไม่?
11 bash  array 

2
เขียนอาร์เรย์เริ่มต้นให้กับตัวแปรใน Bash
ผมคาดหวังว่า excludes="${excludes:-( ${default_excludes[@]} )}" ที่จะเป็นอาร์เรย์ถ้า$excludesว่างเปล่า น่าเสียดายที่สิ่ง:-ต่อไปนี้ถูกใช้เป็นสตริง ฉันพลาดความผิดพลาดทางไวยากรณ์หรือไม่หรือฉันต้องใช้ clunky if [ -z "${excludes:-}" ] then excludes=( "${default_excludes[@]}" ) fi ?
10 bash  array 

6
เรียงลำดับทุบตีตามความยาวขององค์ประกอบ?
รับอาร์เรย์ของสตริงฉันต้องการเรียงลำดับตามความยาวของแต่ละองค์ประกอบ ตัวอย่างเช่น... array=( "tiny string" "the longest string in the list" "middle string" "medium string" "also a medium string" "short string" ) ควรจัดเรียง ... "the longest string in the list" "also a medium string" "medium string" "middle string" "short string" "tiny string" (เป็นโบนัสมันจะดีถ้ารายการเรียงสตริงที่มีความยาวเท่ากันตามลำดับตัวอักษรในตัวอย่างข้างต้นmedium stringถูกเรียงลำดับก่อนmiddle stringแม้ว่าจะมีความยาวเท่ากัน แต่นั่นไม่ใช่ข้อกำหนด "ยาก" หากซับซ้อนกว่า สารละลาย). มันก็โอเคถ้ามีการจัดเรียงอาร์เรย์ในสถานที่ …

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