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