Unix / Linux - การทดแทนเชลล์

Substitution คืออะไร?

เชลล์ทำการแทนที่เมื่อพบนิพจน์ที่มีอักขระพิเศษอย่างน้อยหนึ่งตัว

ตัวอย่าง

ที่นี่ค่าการพิมพ์ของตัวแปรจะถูกแทนที่ด้วยค่าของตัวแปร ในเวลาเดียวกัน,"\n" ถูกแทนที่ด้วยบรรทัดใหม่ -

#!/bin/sh

a=10
echo -e "Value of a is $a \n"

คุณจะได้รับผลดังต่อไปนี้ ที่นี่-e อ็อพชันเปิดใช้งานการตีความแบ็กสแลช Escape

Value of a is 10

ต่อไปนี้เป็นผลลัพธ์ที่ไม่มี -e ตัวเลือก -

Value of a is 10\n

ลำดับการหลีกต่อไปนี้ซึ่งสามารถใช้ในคำสั่ง echo -

ซีเนียร์ Escape & Description
1

\\

แบ็กสแลช

2

\a

การแจ้งเตือน (BEL)

3

\b

backspace

4

\c

ปราบปรามการขึ้นบรรทัดใหม่ต่อท้าย

5

\f

ฟีดรูปแบบ

6

\n

บรรทัดใหม่

7

\r

การกลับรถ

8

\t

แท็บแนวนอน

9

\v

แท็บแนวตั้ง

คุณสามารถใช้ไฟล์ -E ตัวเลือกในการปิดใช้งานการตีความเครื่องหมายแบ็กสแลช Escape (ค่าเริ่มต้น)

คุณสามารถใช้ไฟล์ -n ตัวเลือกในการปิดใช้งานการแทรกบรรทัดใหม่

การแทนที่คำสั่ง

การแทนที่คำสั่งคือกลไกที่เชลล์ดำเนินการชุดคำสั่งที่กำหนดจากนั้นแทนที่เอาต์พุตของคำสั่งนั้นแทนคำสั่ง

ไวยากรณ์

การทดแทนคำสั่งจะดำเนินการเมื่อกำหนดคำสั่งเป็น -

`command`

เมื่อดำเนินการแทนคำสั่งตรวจสอบให้แน่ใจว่าคุณใช้ backquote ไม่ใช่อักขระเครื่องหมายคำพูดเดี่ยว

ตัวอย่าง

โดยทั่วไปการทดแทนคำสั่งจะใช้เพื่อกำหนดเอาต์พุตของคำสั่งให้กับตัวแปร แต่ละตัวอย่างต่อไปนี้แสดงให้เห็นถึงการทดแทนคำสั่ง -

#!/bin/sh

DATE=`date`
echo "Date is $DATE"

USERS=`who | wc -l`
echo "Logged in user are $USERS"

UP=`date ; uptime`
echo "Uptime is $UP"

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

Date is Thu Jul  2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul  2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03,  1 user,  load avg: 0.13, 0.07, 0.15

การทดแทนตัวแปร

การทดแทนตัวแปรช่วยให้โปรแกรมเมอร์เชลล์สามารถจัดการกับค่าของตัวแปรตามสถานะของมัน

นี่คือตารางต่อไปนี้สำหรับการเปลี่ยนตัวที่เป็นไปได้ทั้งหมด -

ซีเนียร์ แบบฟอร์มและคำอธิบาย
1

${var}

แทนค่าของvar

2

${var:-word}

หากvarเป็นค่าว่างหรือไม่ได้ตั้งค่าคำจะถูกแทนที่ด้วยvar. ค่าของvarไม่เปลี่ยนแปลง

3

${var:=word}

ถ้าvarเป็นโมฆะหรือไม่ได้ตั้งค่าvarจะถูกตั้งค่าเป็นword.

4

${var:?message}

หากvarเป็นค่าว่างหรือไม่ได้ตั้งค่าข้อความจะถูกพิมพ์เป็นข้อผิดพลาดมาตรฐาน ตรวจสอบว่าตัวแปรตั้งค่าถูกต้อง

5

${var:+word}

หากตั้งค่าvar คำจะถูกแทนที่ด้วย var ค่าของvarไม่เปลี่ยนแปลง

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างเพื่อแสดงสถานะต่างๆของการทดแทนข้างต้น -

#!/bin/sh

echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}"

echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}"

unset var
echo ${var:+"This is default value"}
echo "3 - Value of var is $var"

var="Prefix"
echo ${var:+"This is default value"}
echo "4 - Value of var is $var"

echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set

3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix