ผลต่างระหว่างรุ่นของ "01204223/filename expansion"
ไปยังการนำทาง
ไปยังการค้นหา
Jittat (คุย | มีส่วนร่วม) |
Chaiporn (คุย | มีส่วนร่วม) |
||
(ไม่แสดง 4 รุ่นระหว่างกลางโดยผู้ใช้ 2 คน) | |||
แถว 1: | แถว 1: | ||
− | ในการทำงานบนระบบ unix โดยผ่านทาง shell ทั่วไป เราจะได้รับการอำนวยความสะดวกหลายอย่างจาก shell สิ่งหนึ่งก็คือการใช้งานแพทเทิร์นเพื่อระบุชื่อไฟล์ ทั้งหมดนี้อยู่ในสิ่งที่เราเรียกว่า word expansion (หรือ word substitution | + | : ''เอกสารนี้ประกอบการสอนวิชา [[01204223]]'' |
+ | |||
+ | ในการทำงานบนระบบ unix โดยผ่านทาง shell ทั่วไป เราจะได้รับการอำนวยความสะดวกหลายอย่างจาก shell สิ่งหนึ่งก็คือการใช้งานแพทเทิร์นเพื่อระบุชื่อไฟล์ ทั้งหมดนี้อยู่ในสิ่งที่เราเรียกว่า word expansion (หรือ word substitution) | ||
ลักษณะของ word expansion ที่ shell ทำให้นั้น จะเป็นการขยายคำสั่งที่เราพิมพ์เข้าไป พิจารณาตัวอย่างของคำสั่ง <tt>echo</tt> เมื่อเรียกในไดเร็กทอรีที่มีไฟล์ <tt>test.c</tt> และ <tt>hello.c</tt> | ลักษณะของ word expansion ที่ shell ทำให้นั้น จะเป็นการขยายคำสั่งที่เราพิมพ์เข้าไป พิจารณาตัวอย่างของคำสั่ง <tt>echo</tt> เมื่อเรียกในไดเร็กทอรีที่มีไฟล์ <tt>test.c</tt> และ <tt>hello.c</tt> | ||
แถว 10: | แถว 12: | ||
shell จะขยายแพทเทิร์น <tt>*.c</tt> ด้วยไฟล์ที่ตรงกับที่แพทเทิร์นนั้นระบุ | shell จะขยายแพทเทิร์น <tt>*.c</tt> ด้วยไฟล์ที่ตรงกับที่แพทเทิร์นนั้นระบุ | ||
− | == | + | == แพทเทิร์นแบบ glob == |
− | + | แพทเทิร์นที่ใช้ระบุชื่อไฟล์บนยูนิกซ์เชลล์นั้นเรียกว่า [http://en.wikipedia.org/wiki/Glob_(programming) glob pattern] ซึ่งมีรูปแบบการใช้งานที่ง่ายกว่าแพทเทิร์นแบบ[http://en.wikipedia.org/wiki/Regular_expression นิจน์เรกูลาร์] (regular expression) ดังที่ใช้ในคำสั่งประเภท grep แพทเทิร์นแบบ glob สามารถประกอบไปด้วยอักขระพิเศษต่อไปนี้ | |
* '''<tt>*</tt>''' --- จะแทนสตริงใด ๆ รวมถึงสตริงว่าง | * '''<tt>*</tt>''' --- จะแทนสตริงใด ๆ รวมถึงสตริงว่าง | ||
แถว 21: | แถว 23: | ||
เราสามารถใช้แพทเทิร์นเหล่านี้หลากหลาย เช่น | เราสามารถใช้แพทเทิร์นเหล่านี้หลากหลาย เช่น | ||
− | * <tt>*.c</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c | + | * <tt>*.c</tt> --- แทนทุกแฟ้มข้อมูลที่มีนามสกุล c |
− | * <tt>*/*.c</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ในทุก ๆ ไดเร็กทอรีย่อย | + | * <tt>*/*.c</tt> --- แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ในทุก ๆ ไดเร็กทอรีย่อย |
− | * <tt>*/h*.cpp</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อย | + | * <tt>*/h*.cpp</tt> --- แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อย |
− | * <tt>test?/h*.cpp</tt> แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวอักษรหนึ่งตัว | + | * <tt>test?/h*.cpp</tt> --- แทนทุกแฟ้มข้อมูลที่มีนามสกุล c ที่มีชื่อขึ้นต้นด้วย h ในทุก ๆ ไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวอักษรหนึ่งตัว |
− | * <tt>test[0-9]/out-[a-z]</tt> แทนแฟ้มขึ้นต้นด้วย <tt>out-</tt> ตามด้วยตัวอักษรภาษาอังกฤษตัวเล็ก ในไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวเลขหนึ่งตัว | + | * <tt>test[0-9]/out-[a-z]</tt> --- แทนแฟ้มขึ้นต้นด้วย <tt>out-</tt> ตามด้วยตัวอักษรภาษาอังกฤษตัวเล็ก ในไดเร็กทอรีย่อยที่มีชื่อว่า test ตามด้วยตัวเลขหนึ่งตัว |
รุ่นแก้ไขปัจจุบันเมื่อ 04:49, 18 สิงหาคม 2557
- เอกสารนี้ประกอบการสอนวิชา 01204223
ในการทำงานบนระบบ 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 ด้วยไฟล์ที่ตรงกับที่แพทเทิร์นนั้นระบุ
แพทเทิร์นแบบ glob
แพทเทิร์นที่ใช้ระบุชื่อไฟล์บนยูนิกซ์เชลล์นั้นเรียกว่า glob pattern ซึ่งมีรูปแบบการใช้งานที่ง่ายกว่าแพทเทิร์นแบบนิจน์เรกูลาร์ (regular expression) ดังที่ใช้ในคำสั่งประเภท grep แพทเทิร์นแบบ glob สามารถประกอบไปด้วยอักขระพิเศษต่อไปนี้
- * --- จะแทนสตริงใด ๆ รวมถึงสตริงว่าง
- ? --- จะแทนตัวอักษรตัวเดียว
- [...] --- เราสามารถระบุเซตของตัวอักษรที่จะถูกแทนได้ เช่น [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 ตามด้วยตัวเลขหนึ่งตัว