ประกาศอาร์เรย์ แต่ไม่ได้กำหนดหรือไม่


14

มีคำแนะนำ มากมายซึ่งแสดงวิธีการประกาศและกำหนดอาร์เรย์

foo[0]=abc 
foo[1]=def

สิ่งที่ฉันพยายามที่จะบรรลุคือการประกาศอาร์เรย์ แต่ไม่ได้กำหนดเพราะไม่จำเป็นต้องกำหนดทันทีในภาษาการเขียนโปรแกรมส่วนใหญ่มันจะมีลักษณะเช่นนี้

int bar[100];

เป็นไปได้ในภาษาสคริปต์เปลือก?

คำตอบ:


23

คุณสามารถระบุว่าตัวแปรนั้นเป็นอาร์เรย์โดยการสร้างอาร์เรย์ที่ว่างเปล่าดังนี้:

var_name=()

var_name จะเป็นอาร์เรย์ตามที่รายงานโดย

$ declare -p var_name
declare -a var_name='()'

ตัวอย่าง:

var_name=()
for i in {1..10}; do
    var_name[$i]="Field $i of the list"
done
declare -p var_name
echo "Field 5 is: ${var_name[5]}"

ซึ่งแสดงผลแบบนี้:

declare -a var_name='([1]="Field 1 of the list" [2]="Field 2 of the list" [3]="Field 3 of the list" [4]="Field 4 of the list" [5]="Field 5 of the list" [6]="Field 6 of the list" [7]="Field 7 of the list" [8]="Field 8 of the list" [9]="Field 9 of the list" [10]="Field 10 of the list")'
Field 5 is: Field 5 of the list

minerz029, @am: .. แล้วจะกำหนดองค์ประกอบอย่างไร? ฉันพยายาม แต่สามารถกำหนด / เข้าถึงสตริงเดียว .. ตัวอย่างเล็ก ๆ น้อย ๆ ในการกำหนดและเข้าถึงค่าสำหรับตัวแปรอาเรย์จะดีมาก ...
แม่นยำ

คิดออกดี .. ฉันหายไปวงเล็บปีกกา ..
แม่นยำ

4

นอกจากวิธีข้างต้นเรายังสามารถสร้างอาร์เรย์โดยประกาศคำสั่ง

คำสั่งประกาศพร้อมกับตัวเลือก -a สามารถใช้ในการประกาศตัวแปรเป็นอาร์เรย์ แต่มันไม่จำเป็น ตัวแปรทั้งหมดสามารถใช้เป็นอาร์เรย์โดยไม่มีคำจำกัดความที่ชัดเจน ตามความเป็นจริงปรากฏว่าในความเป็นจริงตัวแปรทั้งหมดเป็นอาร์เรย์และการกำหนดโดยไม่มีตัวห้อยนั้นเหมือนกับการกำหนดให้กับ "[0]" การประกาศอย่างชัดเจนของอาร์เรย์นั้นทำได้โดยใช้การประกาศในตัว:

declare -a ARRAYNAME

มีการสร้างอาร์เรย์ที่เกี่ยวข้องโดยใช้

declare -A name.

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

หลังจากคุณตั้งค่าตัวแปรอาเรย์แล้วคุณสามารถเข้าถึงได้ดังนี้:

${array_name[index]}

1

นี่ก็เหมือนกับ C. ใน C เราสามารถจัดเรียงได้ตามที่คุณต้องการ ที่นี่เราสามารถนำอาเรย์ที่ว่างแล้วใส่ค่าใด ๆ

bar=()

ง่าย ๆ สำหรับวนรอบเพื่อรับค่าในอาร์เรย์นั้นและพิมพ์ที่:

bar=()
for ((i=0;i<10;i++));
do
    read bar[$i]  #Take Value in bar array
    echo bar[$i]
done

หวังว่าจะช่วย


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