ค้นหาเว็บไซต์

การทดแทนตัวแปรที่ซ้อนกันและตัวแปร 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 MAIL 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 อย่าลืมให้ข้อเสนอแนะอันมีค่าของคุณแก่เราในส่วนความคิดเห็นด้านล่าง