สมมติว่าคุณใช้รีbash
ลีส 4.0 หรือใหม่กว่า ...
CODE=A
declare -A domain
domain=(
[a]=com.tencent.ig
[b]=com.vng.pubgmobile
[c]=com.pubg.krmobile
[d]=com.rekoo.pubgm
)
PN=${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
ในรหัสฉันกำหนดอาเรย์แบบเชื่อมโยงที่มีชื่อโดเมนทั้งหมดโดยแต่ละอันจะเชื่อมโยงกับคีย์ตัวพิมพ์เล็ก
$PN
ตัวแปรมีการกำหนดชื่อโดเมนที่สอดคล้องกับต่ำดาด$CODE
ค่า ( ${CODE,,}
ผลตอบแทนที่คุ้มค่าของการ$CODE
กลายเป็นตัวอักษรกรณีที่ต่ำกว่าเท่านั้น) จากแถวนี้ แต่ถ้า$CODE
ไม่ตรงกับรายการที่ถูกต้องในdomain
รายชื่อออกจากสคริปต์ด้วย ความผิดพลาด
การ${variable:?error message}
แทนที่พารามิเตอร์จะขยายเป็นค่าของ$variable
(โดเมนที่เหมาะสมในรหัส) แต่จะออกจากสคริปต์ด้วยข้อความแสดงข้อผิดพลาดหากค่านั้นว่างเปล่า คุณไม่ได้รับการจัดรูปแบบของข้อความแสดงข้อผิดพลาดเหมือนกับในรหัสของคุณ แต่โดยพื้นฐานแล้วจะทำงานเหมือนกันหาก$CODE
ไม่ถูกต้อง:
$ bash script.sh
script.sh: line 12: domain[${CODE,,}]: ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS
หากคุณใส่ใจเกี่ยวกับการนับตัวละครเราสามารถย่อให้สั้นลงได้อีก:
CODE=A
declare -A domain=( [a]=tencent.ig [b]=vng.pubgmobile [c]=pubg.krmobile [d]=rekoo.pubgm )
PN=com.${domain[${CODE,,}]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
นอกเหนือจากการลบบรรทัดใหม่ที่ไม่จำเป็นฉันยังลบcom.
จากแต่ละโดเมน (ซึ่งจะถูกเพิ่มในการมอบหมายให้แทนPN
)
โปรดทราบว่ารหัสทั้งหมดข้างต้นจะสามารถใช้งานได้แม้จะมีค่าหลายตัวอักษรใน$CODE
(หากมีรหัสที่ต่ำกว่าสำหรับรหัสเหล่านี้ในdomain
อาร์เรย์)
หาก$CODE
เป็นดัชนีตัวเลข (อิงเป็นศูนย์) แทนสิ่งนี้จะทำให้โค้ดง่ายขึ้นเล็กน้อย:
CODE=0
domain=( com.tencent.ig com.vng.pubgmobile com.pubg.krmobile com.rekoo.pubgm )
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
สิ่งนี้จะทำให้ง่ายต่อการอ่านdomain
อาร์เรย์จากไฟล์เสริมที่มีหนึ่งรายการต่อบรรทัด:
CODE=0
readarray -t domain <domains.txt
PN=${domain[CODE]:?ERROR! CODE KOSONG, MELAKUKAN EXIT OTOMATIS}
bash
รหัสหรือไม่ หรือคุณมีเปลือกอื่น ๆ ในใจ?