Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

เชี่ยวชาญ Nested Variable Substitution และ Built-in BASH Variables ใน Linux – คู่มือฉบับสมบูรณ์

บทความล่าสุด 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 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

มีรายการ Predefined BASH Variable ยาวมาก เราพยายามสร้างรายการที่ใช้บ่อยที่สุด

ขอจบเท่านี้สำหรับตอนนี้ ผมจะกลับมาอีกครั้งกับบทความน่าสนใจอีกเรื่อง จนกว่าจะพบกันใหม่ ติดตามและเชื่อมต่อกับ TecMint อย่าลืมให้ความคิดเห็นที่มีค่ากับเราในส่วนความคิดเห็นด้านล่าง