เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

คำคมคู่

ใบเสนอราคาประเภทแรกที่เราจะพิจารณาคือ คำพูดคู่. หากเราใส่ข้อความในเครื่องหมายคำพูดคู่ อักขระพิเศษทั้งหมดที่ใช้โดยเชลล์จะสูญเสียความหมายพิเศษและถือเป็นอักขระธรรมดา ข้อยกเว้นคือ “$”, “\" (แบ็กสแลช) และ “`” (เครื่องหมายแบ็กสแลช) ซึ่งหมายความว่าการแบ่งคำ การขยายชื่อพาธ การขยายเครื่องหมายทิลเดอร์ และการขยายวงเล็บปีกกา ถูกระงับ แต่การขยายพารามิเตอร์ การขยายเลขคณิต และการแทนที่คำสั่งยังคงดำเนินการอยู่ การใช้เครื่องหมายอัญประกาศคู่ เราสามารถจัดการกับชื่อไฟล์ที่มีช่องว่างฝังตัวได้ สมมติว่าเราเป็นเหยื่อโชคร้ายของไฟล์ชื่อ สองคำ.txt. หากเราพยายามใช้สิ่งนี้ในบรรทัดคำสั่ง การแยกคำจะทำให้สิ่งนี้ถือเป็นอาร์กิวเมนต์แยกกันสองอาร์กิวเมนต์ แทนที่จะเป็นอาร์กิวเมนต์เดี่ยวที่ต้องการ:



[me@linuxbox ~]$ ls -l สองคำ.txt

ls: ไม่สามารถเข้าถึงสอง: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ls: ไม่สามารถเข้าถึง word.txt: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

[me@linuxbox ~]$ ls -l สองคำ.txt

ls: ไม่สามารถเข้าถึงสอง: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ls: ไม่สามารถเข้าถึง word.txt: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


โดยใช้เครื่องหมายอัญประกาศคู่ เราจะหยุดการแยกคำและได้ผลลัพธ์ที่ต้องการ นอกจากนี้ เรายังสามารถซ่อมแซมความเสียหายได้:



[me@linuxbox ~]$ ls -l "สองคำ.txt"

-rw-rw-r-- 1 ฉัน ฉัน 18 2016-02-20 13:03 สองคำ.txt [me@linuxbox ~]$ mv "สองคำ.txt" two_words.txt

[me@linuxbox ~]$ ls -l "สองคำ.txt"

-rw-rw-r-- 1 ฉัน ฉัน 18 2016-02-20 13:03 สองคำ.txt [me@linuxbox ~]$ mv "สองคำ.txt" two_words.txt


ที่นั่น! ตอนนี้เราไม่ต้องพิมพ์เครื่องหมายคำพูดคู่ที่น่ารำคาญอีกต่อไป

โปรดจำไว้ว่า การขยายพารามิเตอร์ การขยายเลขคณิต และการแทนที่คำสั่งยังคงเกิดขึ้นภายในเครื่องหมายคำพูดคู่:


ภาพ

[me@linuxbox ~]$ echo "$USER $((2+2)) $(cal)"

ฉัน 4 กุมภาพันธ์ 2016


Su

Mo

Tu

We

Th

Fr

Sa

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29


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


[me@linuxbox ~]$ ก้องนี่คือ

นี่คือการทดสอบ

ทดสอบ

[me@linuxbox ~]$ ก้องนี่คือ

นี่คือการทดสอบ


ภาพ

ตามค่าเริ่มต้น การแยกคำจะค้นหาการเว้นวรรค แท็บ และการขึ้นบรรทัดใหม่ (อักขระป้อนบรรทัด) และถือว่าเป็น ตัวคั่น ระหว่างคำ ซึ่งหมายความว่าช่องว่าง แท็บ และการขึ้นบรรทัดใหม่ที่ไม่ได้ใส่เครื่องหมายคำพูดจะไม่ถือว่าเป็นส่วนหนึ่งของข้อความ พวกเขาทำหน้าที่เป็นตัวคั่นเท่านั้น เนื่องจากแยกคำออกเป็นอาร์กิวเมนต์ที่แตกต่างกัน บรรทัดคำสั่งตัวอย่างของเราจึงมีคำสั่งตามด้วยอาร์กิวเมนต์ที่แตกต่างกันสี่ตัว ถ้าเราเพิ่มเครื่องหมายคำพูดคู่:


[me@linuxbox ~]$ echo "นี่คือ

ทดสอบ"

[me@linuxbox ~]$ echo "นี่คือ


นี่คือการทดสอบ

นี่คือการทดสอบ


ภาพ

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

ข้อเท็จจริงที่ว่าการขึ้นบรรทัดใหม่ถือเป็นตัวคั่นโดยกลไกการแยกคำทำให้เกิดผลกระทบที่น่าสนใจ แม้ว่าจะเป็นเรื่องละเอียดอ่อนต่อการแทนที่คำสั่ง พิจารณาสิ่งต่อไปนี้:


ภาพ

[me@linuxbox ~]$ เสียงสะท้อน $(cal)

กุมภาพันธ์ 2016 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14

15 16 17 18 19 20 21 22 23 24 25 26 27

[me@linuxbox ~]$ เสียงสะท้อน "$(cal)"

กุมภาพันธ์ 2016


Su

Mo

Tu

We

Th

Fr

Sa

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29


ในตัวอย่างแรก การแทนที่คำสั่งที่ไม่ได้ใส่เครื่องหมายอัญประกาศทำให้เกิดบรรทัดรับคำสั่งที่มี 38 อาร์กิวเมนต์ ในบรรทัดที่สอง บรรทัดคำสั่งที่มีหนึ่งอาร์กิวเมนต์ที่มีช่องว่างฝังตัวและขึ้นบรรทัดใหม่


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: