การทดแทนตัวแปรที่ซ้อนกันและตัวแปร BASH ที่กำหนดไว้ล่วงหน้าใน Linux - ตอนที่ 11
สองบทความล่าสุดเกี่ยวกับ BASH Shell ซึ่งเราได้พูดคุยถึงตัวแปรโดยละเอียดได้รับการชื่นชมอย่างสูงในหมู่ผู้อ่านของเรา เราในฐานะ ทีม Tecmint มีความกระตือรือร้นอย่างยิ่งที่จะมอบหัวข้อล่าสุด อัปเดต และที่เกี่ยวข้องซึ่งมีรายละเอียดครอบคลุมแก่คุณ ยิ่งไปกว่านั้น เราพยายามที่จะสัมผัสมุมมองที่สำคัญของหัวข้อที่เกี่ยวข้องอยู่เสมอ
นี่คือบทความสุดท้ายเกี่ยวกับตัวแปร Linux ที่เราจะได้เห็นการทดแทนตัวแปรและตัวแปรที่กำหนดในเชลล์ก่อนที่จะปิดหัวข้อนี้
Bash ทำการทดแทนตัวแปรก่อนที่คำสั่งจะถูกดำเนินการจริงๆ Linux Bash Shell ค้นหาเครื่องหมาย '$' ทั้งหมดก่อนดำเนินการคำสั่งและแทนที่ด้วยค่าของตัวแปร กระบวนการทดแทน Bash Variable จะดำเนินการเพียงครั้งเดียว จะเกิดอะไรขึ้นถ้าเรามีตัวแปรที่ซ้อนกัน?
หมายเหตุ: โดยตัวแปรที่ซ้อนกัน เราหมายถึงตัวแปรที่ประกาศภายในตัวแปร มาดูสถานการณ์ข้างต้นในตัวอย่างด้านล่าง
ประกาศตัวแปรแบบ Read-Only และ Executable ได้ดังนี้
avi@localhost:~$ declare -rx Linux_best_website="linux-console.net"
ตรวจสอบค่าของตัวแปรที่เก็บไว้
avi@localhost:~$ printf "%s" "$Linux_best_website"
linux-console.net
ตอนนี้ประกาศตัวแปรอื่นซึ่งอีกครั้งเป็นแบบอ่านอย่างเดียวและปฏิบัติการได้
avi@localhost:~$ declare -rx Linux_website="Linux_best_website"
ตอนนี้สถานการณ์คือ เราได้กำหนดตัวแปรสองตัวแล้ว
‘Linux_best_website’ ซึ่งมีค่าเป็น “linux-console.net ”
และ 'Linux_website' ซึ่งค่าคือ "Linux_best_website"
ถ้าเรารันคำสั่งหนึ่งบรรทัดด้านล่างจะเกิดอะไรขึ้น?
avi@localhost:~$ printf "%s" "$Linux_website"
ก่อนอื่นควรแทนที่ตัวแปร '$Linux_website' ด้วยค่า “Linux_best_website ” จากนั้น “$Linux_best_website ” จะเป็นตัวแปรอีกครั้งที่มีค่าของ ซึ่งก็คือ “linux-console.net ” ดังนั้นผลลัพธ์สุดท้ายของการรันคำสั่งด้านล่างควรเป็น
avi@localhost:~$ printf "%s" "$Linux_website"
linux-console.net
แต่น่าเสียดายที่นี่ไม่ใช่สถานการณ์ ผลลัพธ์ที่เราได้รับคือ Linux_best_website
เหตุผล? ได้! Bash แทนที่ค่าของตัวแปรเพียงครั้งเดียว แล้วสคริปต์และโปรแกรมที่ซับซ้อนที่เราจำเป็นต้องแทนที่ตัวแปรบ่อยครั้งและจำเป็นต้องแทนที่ตัวแปรมากกว่าหนึ่งครั้งล่ะ?
ต่อไปนี้คือคำสั่ง 'eval' ซึ่งดำเนินการเพิ่มเติมของการทดแทนตัวแปรมากกว่าหนึ่งครั้งในสคริปต์ นี่คือตัวอย่างเพื่อทำให้งานทั้งหมดใสราวกับกระจก
ประกาศตัวแปร x ซึ่งมีค่าเท่ากับ 10
avi@localhost:~/Desktop$ declare x=10
ตรวจสอบค่าของตัวแปร x ที่เราเพิ่งนิยามไว้
avi@localhost:~/Desktop$ echo $yx
x10
ประกาศตัวแปร y ซึ่งมีค่าเป็น x
avi@localhost:~/Desktop$ declare y=x
ตรวจสอบค่าของตัวแปร y ที่เราเพิ่งกำหนดไว้
avi@localhost:~/Desktop$ echo $y
x
นี่คือปัญหาของการทดแทนตัวแปรครั้งเดียว BASH ซึ่งไม่ทำการทดแทนตัวแปรรอบพิเศษ เรากำลังใช้คำสั่ง 'eval' เพื่อแก้ไขปัญหานี้
avi@localhost:~/Desktop$ eval y=$x
ตอนนี้ตรวจสอบค่าของตัวแปร 'y'
avi@localhost:~/Desktop$ echo $y
10
เย่! ปัญหาได้รับการแก้ไขแล้วและคำสั่ง 'eval' ชนะการแข่งขัน :)
ไม่ต้องพูดถึง คำสั่ง 'eval' มีประโยชน์มากในโปรแกรมสคริปต์ขนาดใหญ่และเป็นเครื่องมือที่มีประโยชน์มาก
ส่วนสุดท้ายแต่ไม่ใช่ส่วนท้ายสุดของโพสต์นี้คือตัวแปรที่กำหนดไว้ล่วงหน้าของ BASH เลขที่! อย่าตกใจเมื่อเห็นรายการนี้ คุณไม่จำเป็นต้องจำรายการทั้งหมดก่อนที่จะเริ่มเขียนสคริปต์ยกเว้นบางส่วน ในส่วนหนึ่งของกระบวนการเรียนรู้ เรากำลังนำเสนอรายการตัวแปรที่กำหนดไว้ล่วงหน้าของ BASH
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 |
มีรายการตัวแปร BASH ที่กำหนดไว้ล่วงหน้ามากมาย เราได้พยายามสร้างรายการที่ใช้บ่อยที่สุด
นั่นคือทั้งหมดที่สำหรับตอนนี้. ฉันจะกลับมาที่นี่อีกครั้งพร้อมกับบทความที่น่าสนใจอื่น ๆ จนกว่าจะคอยติดตามและเชื่อมต่อกับ TecMint อย่าลืมให้ข้อเสนอแนะอันมีค่าของคุณแก่เราในส่วนความคิดเห็นด้านล่าง