ผลต่างระหว่างรุ่นของ "01204223/filename expansion"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 17: แถว 17:
 
* '''<tt>?</tt>''' --- จะแทนตัวอักษรตัวเดียว
 
* '''<tt>?</tt>''' --- จะแทนตัวอักษรตัวเดียว
 
* '''<tt>[...]</tt>''' --- เราสามารถระบุเซตของตัวอักษรที่จะถูกแทนได้ เช่น <tt>[acd]</tt> จะแทนตัวอักษร a, c, หรือ d ก็ได้  โดยเราสามารถใช้เครื่องหมาย - ในการระบุได้ด้วย เช่น <tt>[a-z]</tt> จะแทนตัวอักษรภาษาอังกฤษพิมพ์เล็ก หรือ <tt>[a-z0-9]</tt> จะรวมตัวเลขเข้าไปด้วย  นอกจากนี้ ถ้าเราขึ้นต้นรายการด้วย <tt>^</tt> หรือ <tt>!</tt> เซตนี้จะแทนตัวอักษรทั้งหมดที่ไม่อยู่ในรายการ เช่น <tt>[^0-9]</tt> จะแทนตัวอักษรทั้งหมดที่ไม่ใช่ตัวเลข
 
* '''<tt>[...]</tt>''' --- เราสามารถระบุเซตของตัวอักษรที่จะถูกแทนได้ เช่น <tt>[acd]</tt> จะแทนตัวอักษร a, c, หรือ d ก็ได้  โดยเราสามารถใช้เครื่องหมาย - ในการระบุได้ด้วย เช่น <tt>[a-z]</tt> จะแทนตัวอักษรภาษาอังกฤษพิมพ์เล็ก หรือ <tt>[a-z0-9]</tt> จะรวมตัวเลขเข้าไปด้วย  นอกจากนี้ ถ้าเราขึ้นต้นรายการด้วย <tt>^</tt> หรือ <tt>!</tt> เซตนี้จะแทนตัวอักษรทั้งหมดที่ไม่อยู่ในรายการ เช่น <tt>[^0-9]</tt> จะแทนตัวอักษรทั้งหมดที่ไม่ใช่ตัวเลข
 +
 +
=== ตัวอย่าง ===
 +
เราสามารถใช้แพทเทิร์นเหล่านี้หลากหลาย เช่น
 +
 +
* <tt>*.c</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c
 +
* <tt>*/*.c</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ในทุก ๆ ไดเร็กทอรีย่อย
 +
* <tt>*/h*.cpp</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อย
 +
* <tt>test?/h*.cpp</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวอักษรหนึ่งตัว
 +
* <tt>test[0-9]/out-[a-z]</tt> แทนแฟ้มขึ้นต้นด้วย <tt>out-</tt> ตามด้วยตัวอักษรภาษาอังกฤษตัวเล็ก ในไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวเลขหนึ่งตัว

รุ่นแก้ไขเมื่อ 03:21, 10 มิถุนายน 2555

ในการทำงานบนระบบ unix โดยผ่านทาง shell ทั่วไป เราจะได้รับการอำนวยความสะดวกหลายอย่างจาก shell สิ่งหนึ่งก็คือการใช้งานแพทเทิร์นเพื่อระบุชื่อไฟล์ ทั้งหมดนี้อยู่ในสิ่งที่เราเรียกว่า word expansion (หรือ word substitution

ลักษณะของ word expansion ที่ shell ทำให้นั้น จะเป็นการขยายคำสั่งที่เราพิมพ์เข้าไป พิจารณาตัวอย่างของคำสั่ง echo เมื่อเรียกในไดเร็กทอรีที่มีไฟล์ test.c และ hello.c

$ echo hello world
hello world
$ echo hello world *.c
hello world test.c hello.c

shell จะขยายแพทเทิร์น *.c ด้วยไฟล์ที่ตรงกับที่แพทเทิร์นนั้นระบุ

แพทเทิร์น

เราสามารถใช้อักขระพิเศษต่อไปนี้ในการเขียนแพทเทิร์นได้

  • * --- จะแทนสตริงใด ๆ รวมถึงสตริงว่าง
  • ? --- จะแทนตัวอักษรตัวเดียว
  • [...] --- เราสามารถระบุเซตของตัวอักษรที่จะถูกแทนได้ เช่น [acd] จะแทนตัวอักษร a, c, หรือ d ก็ได้ โดยเราสามารถใช้เครื่องหมาย - ในการระบุได้ด้วย เช่น [a-z] จะแทนตัวอักษรภาษาอังกฤษพิมพ์เล็ก หรือ [a-z0-9] จะรวมตัวเลขเข้าไปด้วย นอกจากนี้ ถ้าเราขึ้นต้นรายการด้วย ^ หรือ ! เซตนี้จะแทนตัวอักษรทั้งหมดที่ไม่อยู่ในรายการ เช่น [^0-9] จะแทนตัวอักษรทั้งหมดที่ไม่ใช่ตัวเลข

ตัวอย่าง

เราสามารถใช้แพทเทิร์นเหล่านี้หลากหลาย เช่น

  • *.c แทนทุกแฟ้มข้อมูลที่มีนามสกุล c
  • */*.c แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ในทุก ๆ ไดเร็กทอรีย่อย
  • */h*.cpp แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อย
  • test?/h*.cpp แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวอักษรหนึ่งตัว
  • test[0-9]/out-[a-z] แทนแฟ้มขึ้นต้นด้วย out- ตามด้วยตัวอักษรภาษาอังกฤษตัวเล็ก ในไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวเลขหนึ่งตัว