บทความล่าสุด 2 บทความเกี่ยวกับ BASH Shell ที่เราอภิปรายตัวแปรอย่างละเอียด ได้รับการชมเชยสูงจากผู้อ่านของเรา เราในฐานะ Tecmint-Team มุ่งมั่นให้คุณได้รับหัวข้อที่ทันสมัย Up-to-date และเกี่ยวข้องที่ครอบคลุมรายละเอียด นอกจากนี้เราพยายามสัมผัสมุมมองหลักของหัวข้อที่สอดคล้อง
นี่คือบทความสุดท้ายเกี่ยวกับ Linux Variables ซึ่งเราจะเห็น variable substitution และตัวแปรที่นิยามไว้ใน Shell ก่อนปิดหัวข้อนี้
Bash ทำ variable substitution ก่อนที่คำสั่งจะถูกรันจริง Linux Bash Shell ค้นหาเครื่องหมาย '$' ทั้งหมดก่อนรันคำสั่ง และแทนที่ด้วยค่าของตัวแปร กระบวนการ Bash Variable substitution ทำเพียงครั้งเดียว ถ้าเรามี nested variables จะเป็นอย่างไร?
หมายเหตุ: โดย nested variable หมายถึง ตัวแปรที่ประกาศอยู่ภายในตัวแปร มาดูสถานการณ์ข้างต้นในตัวอย่างด้านล่าง
ประกาศตัวแปรที่เป็น Read-Only และ Executable ด้านล่าง
admin@wsxdn.com:~$ declare -rx Linux_best_website="www.tecmint.com"
ตรวจสอบค่าของตัวแปรที่เก็บไว้
admin@wsxdn.com:~$ printf "%s" "$Linux_best_website" www.tecmint.com
ตอนนี้ประกาศตัวแปรอีกตัวที่เป็น Read-Only และ Executable อีกครั้ง
admin@wsxdn.com:~$ declare -rx Linux_website="Linux_best_website"
ตอนนี้สถานการณ์คือ เรากำหนดตัวแปร 2 ตัว
'Linux_best_website' ค่าคือ "www.tecmint.com"
และ 'Linux_website' ค่าคือ "Linux_best_website"
ผลลัพธ์จะเป็นอย่างไร ถ้าเรารันคำสั่งบรรทัดเดียวด้านล่าง?
admin@wsxdn.com:~$ printf "%s" "$Linux_website"
มันควรแทนที่ตัวแปร '$Linux_website' ก่อน ด้วยค่า "Linux_best_website" และจากนั้น "$Linux_best_website" ก็เป็นตัวแปรอีกตัวหนึ่ง ที่ค่าคือ "www.tecmint.com" ดังนั้นผลลัพธ์สุดท้ายของการรันคำสั่งด้านล่างควรเป็น
admin@wsxdn.com:~$ printf "%s" "$Linux_website" www.tecmint.com
แต่น่าเสียดาย สถานการณ์ไม่ใช่แบบนั้น ผลลัพธ์ที่เราได้คือ Linux_best_website
เหตุผล? ใช่! Bash แทนที่ค่าตัวแปรเพียงครั้งเดียว อะไรกับสคริปต์และโปรแกรมซับซ้อนที่เราต้องแทนที่ตัวแปรบ่อยๆ และต้องแทนที่ตัวแปรมากกว่าหนึ่งครั้ง?
ที่นี่มาถึงคำสั่ง 'eval' ซึ่งทำงานเพิ่มเติมเกี่ยวกับ variable substitution มากกว่าหนึ่งครั้งในสคริปต์ นี่คือตัวอย่างเพื่อให้การทำงานทั้งหมดชัดเจน כמוแก้ว
ประกาศตัวแปร x ค่าคือ 10
admin@wsxdn.com:~/Desktop$ declare x=10
ตรวจสอบค่าตัวแปร x ที่เรากำหนดเมื่อสักครู่
admin@wsxdn.com:~/Desktop$ echo $yx x10
ประกาศตัวแปร y ค่าคือ x
admin@wsxdn.com:~/Desktop$ declare y=x
ตรวจสอบค่าตัวแปร y ที่เรากำหนดเมื่อสักครู่
admin@wsxdn.com:~/Desktop$ echo $y x
นี่คือปัญหาของ BASH การแทนที่ตัวแปรครั้งเดียว ซึ่งไม่ทำการแทนที่ตัวแปรรอบที่สอง เราใช้คำสั่ง 'eval' เพื่อแก้ไข
admin@wsxdn.com:~/Desktop$ eval y=$x
ตอนนี้ตรวจสอบค่าตัวแปร 'y'
admin@wsxdn.com:~/Desktop$ echo $y 10
เย่! ปัญหาแก้ไขแล้ว และคำสั่ง 'eval' ชนะการแข่งขัน :)
ไม่ต้องพูดว่า คำสั่ง 'eval' ช่วยมากในโปรแกรมสคริปต์ขนาดใหญ่ และเป็นเครื่องมือที่ใช้ง่ายมาก
ส่วนสุดท้ายแต่ไม่ใช่สิ่งน้อยของโพสต์นี้คือ BASH predefined variables ไม่! อย่าตกใจเห็นรายการนี้ คุณไม่จำเป็นต้องจดจำรายการทั้งหมดก่อนเริ่มเขียนสคริปต์ ยกเว้นไม่กี่ตัว ในฐานะส่วนหนึ่งของกระบวนการเรียนรู้ เรานำเสนอ BASH predefined variable List
| No. | BASH VARIABLE | RESULT |
| 1 | auto_resume | Process command completion for the stopped jobs. |
| 2 | BASH | PATH of the shell. |
| 3 | BASH_ENV | Shows the name of the profile file |
| 4 | BASH_VERSION | Shows the version of Bash |
| 5 | BASH_VERSINFO | Shows Detailed version information. |
| 6 | BASH_VERSINFO[0] | The major version number (the release). |
| 7 | BASH_VERSINFO[1] | The minor version number (the version). |
| 8 | BASH_VERSINFO[2] | The patch level. |
| 9 | BASH_VERSINFO[3] | The build version. |
| 10 | BASH_VERSINFO[4] | The release status (for example, beta1). |
| 11 | BASH_VERSINFO[5] | The value of MACHTYPE. |
| 12 | CDPATH | List of directories separated by colon. |
| 13 | COLUMNS | Number of Characters per line on Standard Output. |
| 14 | EUID | User ID of the current user. |
| 15 | FCEDIT | The default text editor for the fc command. |
| 16 | FUNCNAME | The name of the fun |
| 17 | GROUPS | Groups of which the user is a Member. |
| 18 | HISTFILE | The file containing the command history. |
| 19 | HOME | The name of your home directory. |
| 20 | LINES | Number of horizontal lines on Standard Output. |
| 21 | Name of a file to check for incoming mail | |
| 22 | OSTYPE | Name of the operating system. |
| 23 | OLDPWD | The previous working directory |
| 24 | PWD | The current working directory |
| 25 | RANDOM | Prints a random number |
| 26 | SHELL | The preferred shell to use |
| 27 | TIMEFORMAT | The format for the time command. |
| 28 | UID | The ID of the current user |
มีรายการ Predefined BASH Variable ยาวมาก เราพยายามสร้างรายการที่ใช้บ่อยที่สุด
ขอจบเท่านี้สำหรับตอนนี้ ผมจะกลับมาอีกครั้งกับบทความน่าสนใจอีกเรื่อง จนกว่าจะพบกันใหม่ ติดตามและเชื่อมต่อกับ TecMint อย่าลืมให้ความคิดเห็นที่มีค่ากับเราในส่วนความคิดเห็นด้านล่าง