Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

ควบคุมข้อมูลของคุณด้วยอาร์เรย์ที่เชื่อมโยงใน Bash

หากคุณเคยเขียนโค้ด ไม่ว่าจะเป็นเชลล์สคริปต์ สคริปต์ Python C++ หรือแม้แต่ Scratch คุณจะรู้ว่าตัวแปรมีความสำคัญ คอมพิวเตอร์และโปรแกรมเมอร์ใช้ตัวแปรเป็นเวย์สเตชัน โดยจะแอบส่งข้อมูลไปมา ตัวอย่างเช่น หากคุณต้องการประมวลผลชื่อผู้ใช้ในเชลล์สคริปต์ คุณอาจตั้งค่าตัวแปร ใส่ชื่อผู้ใช้ลงในตัวแปร แล้วสั่งให้คอมพิวเตอร์ดำเนินการบางอย่างกับตัวแปร (ตรวจสอบกับรายชื่อผู้ใช้ที่ได้รับอนุญาต , ตัวอย่างเช่น). ตัวแปรมีความสำคัญเนื่องจากเปิดใช้งานโค้ดตามไดนามิก:เป็นตัวยึดตำแหน่งสำหรับข้อมูลที่คาดว่าจะเปลี่ยนแปลงทุกครั้งที่คุณเรียกใช้โค้ด

แต่ตัวแปร เนื่องจากเป็นตัวแปรทั่วไป จึงค่อนข้างเทอะทะได้ บ่อยครั้ง คุณรวบรวมตัวแปรจำนวนมากในโครงการโค้ดซึ่งแทบจะเป็นไปไม่ได้เลยที่จะติดตามทุกตัวแปร คุณสามารถใช้ข้อตกลงที่ชาญฉลาด เช่น นำหน้าตัวแปรที่เกี่ยวข้องทั้งหมดด้วยสตริงทั่วไป (user_name, user_pass, user_time และอื่นๆ) หรือคุณสามารถสร้างรายการหลักจากที่ใดที่หนึ่งเพื่อการอ้างอิงได้ง่าย แต่ค่าใช้จ่ายในการติดตาม ทุกคนสามารถกลายเป็นภาษีได้

คำตอบหนึ่งสำหรับปัญหานี้คือ อาร์เรย์ ตามธรรมเนียมแล้ว สิ่งเหล่านี้ทำงานได้ดีในภาษาเขียนโค้ดส่วนใหญ่ รวมถึงภาษาสคริปต์ของเชลล์ เช่น Bash

เชลล์ส่วนใหญ่เสนอความสามารถในการสร้าง จัดการ และสืบค้นอาร์เรย์ที่จัดทำดัชนี ในภาษาอังกฤษธรรมดา อาร์เรย์ที่จัดทำดัชนีคือรายการของสิ่งต่างๆ ที่นำหน้าด้วยตัวเลข รายการของสิ่งต่างๆ นี้ พร้อมด้วยหมายเลขที่กำหนด ถูกรวมไว้ในตัวแปรเดียว ซึ่งทำให้ง่ายต่อการ "พกพา" ในโค้ดของคุณ

อย่างไรก็ตาม Bash มีความสามารถในการสร้างอาร์เรย์ที่เชื่อมโยง และจะปฏิบัติกับอาร์เรย์เหล่านี้เหมือนกับอาร์เรย์อื่นๆ แอสโซซิเอทีฟอาเรย์ช่วยให้คุณสร้างรายการของคู่คีย์และค่า แทนที่จะสร้างแค่ค่าตัวเลข

คุณสามารถกำหนดค่าให้กับคีย์ใดก็ได้:

$ declare -A userdata
$ userdata[name]=seth
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[login]=`date --utc +%s`

สอบถามคีย์ใด ๆ :

$ echo "${userdata[name]}"
seth
$ echo "${userdata[login]}"
1583362192

การดำเนินการอาร์เรย์ตามปกติส่วนใหญ่ที่คุณคาดหวังจากอาร์เรย์จะพร้อมใช้งาน ตัวอย่างเช่น คุณสามารถแสดงรายการค่าทั้งหมด:

$ echo "${userdata[*]}"
8eab07eb620533b083f241ec4e6b9724 seth 1583362192

คุณสามารถดูอาร์เรย์ทั้งหมดได้:

$ typeset -A
declare -A BASH_ALIASES='()'
declare -A BASH_CMDS='()'
declare -A userdata='([pass]="8eab07eb620533b083f241ec4e6b9724"
[name]="seth"
[login]="1583362192" )'

คุณยังสามารถลบรายการออกจากอาร์เรย์ของคุณโดยใช้ unset คำสั่ง:

$ unset userdata[pass]
$ typeset -A
[...]
declare -A userdata='([name]="seth"
[login]="1583362192" )'

สุดท้าย คุณสามารถยกเลิกอาร์เรย์ทั้งหมดได้

$ unset "userdata[*]"

อาร์เรย์สำหรับข้อมูล

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

นอกจากนี้ คุณไม่จำเป็นต้องมีรายการในอาร์เรย์ก่อนที่คุณจะจัดเก็บข้อมูลในอาร์เรย์ ซึ่งแตกต่างจากตัวแปรอื่นๆ คุณไม่จำเป็นต้องรู้แน่ชัดว่าข้อมูลจะถูกจัดเก็บมากแค่ไหนก่อนที่คุณจะจัดเก็บ นั่นอาจเป็นข้อได้เปรียบอย่างมากหากคุณกำลังประมวลผลข้อมูลที่คุณไม่สามารถควบคุมหรือคาดการณ์ได้:หากคุณไม่ทราบว่าจะมีผู้ใช้จำนวนเท่าใดใน utmp วันหนึ่งข้างหน้า มันยากที่จะสร้างสคริปต์เพื่อบรรจุรายการทั้งหมด อย่างไรก็ตาม ด้วยอาร์เรย์ สิ่งที่คุณต้องทำคือประกาศหนึ่งอาร์เรย์และอ่านข้อมูลลงในอาร์เรย์ สร้างคู่คีย์และค่าใหม่จนกว่าคุณจะไม่มีข้อมูลที่จะนำเข้า

อาร์เรย์นั้นทรงพลัง และเป็นภาษาโปรแกรมทั่วไปที่นอกเหนือไปจาก Bash เริ่มใช้เลย!