Globbing
Globbing ဆိုတာ ရိုးရှင်းတဲ့ Pattern Matching Language တစ်ခုပါပဲ။ သတ်မှတ်ထားတဲ့ Pattern တစ်ခုဖြင့် ကိုက်ညီတဲ့ ဖိုင်အုပ်စုတွေကိုညွှန်းဖို့ရာ Command Line Shells တွေမှာ သုံးတာပါ။ POSIX.1-2017 ဖြင့် အောက်ပါ Pattern Matching Characters တွေကို သတ်မှတ်ထားပါတယ်။
* | မည်သည့် Character မဆို၊ မည်သည့် အရေအတွက်မဆို Zero or More Character(s) ကို ကိုယ်စားပြုပါတယ်။ |
? | မည်သည့် Character တစ်ခုအတွက်မဆို Exactly One Character ကို ကိုယ်စားပြုပါတယ်။ |
[] | ဖော်ပြထားသော Character တစ်ခုခုကို ကိုယ်စားပြုပြီး Range ဖြင့်လည်း ဖော်ပြနိုင်ပါတယ်။ |
ဆိုလိုတာကတော့ စာသားအတိအကျ ဖိုင်နာမည်အတိအကျဖြင့် ရှာမည့်အစား Pattern တစ်ခုဖြင့် တိုက်ကြည့်ပေးဖို့ စစ်ကြည့်ပေးဖို့ Shell ကို ပြောနိုင်တာပါ။ Linux အသုံးပြုသူတွေဟာ ဖိုင်နာမည်တစ်ခုစီရိုက်ရှာမည့်အစား Glob Character သုံးပြီး ဖိုင်တွေကို ဖော်ပြလေ့ရှိကြပါတယ်။ Commands တွေကို ဒီလို Run ပါမယ်။
Command Interpreter ဖြစ်တဲ့ Shell ဟာ (*) ကို မည်သည့် Character မဆို၊ မည်သည့်အရေအတွက်မဆို ကိုယ်စားပြုတဲ့ Any Number of Anything လို့ မြင်မှာမို့ star* အတွက် star ဖြင့်စတဲ့ မည်သည့်ဖိုင်မဆိုလို့ ဘာသာပြန်မှာပါ။ ls star* Command ခေါ်လိုက်တဲ့အခါ အခုရောက်နေတဲ့ Directory ထဲမှာ star* ဆိုတဲ့ ရှာချင်တဲ့ Pattern ဖြင့် ကိုက်ညီမယ့် star အစပြုတဲ့ဖိုင်တွေရဲ့စာရင်းကို ထုတ်ပြပေးမှာပါ။
ls Command ကို အခုလိုခေါ်တာနှင့် အတူတူပဲဖြစ်မှာပါ။
* Character ဟာ ls Command အတွက်တော့ မည်သည့်အဓိပ္ပါယ်မှ မရှိတာကို ဒီလိုပြပါမယ်။
Character တစ်ခုခုရဲ့ရှေ့မှာ Backslash (\) Character ထည့်လိုက်တာဟာ အဲ့ဒီ Character ကို Special Meaning (Zero or more Characters) အနေဖြင့် မမှတ်ယူပါနှင့် သာမန် Character အဖြစ်ပဲ ယူဆပေးပါလို့ Shell ကို ပြောလိုက်တာပါ။ အခုဥပမာမှာ star* ဆိုတဲ့ Glob Character (Asterisk *) အဖြစ် မဟုတ်ဘဲ star\* (တစ်နည်းအားဖြင့် ဖိုင်နာမည် star*) အဖြစ် List လုပ်ခိုင်းလိုက်တာမို့ အဲ့ဒီလို ဖိုင် မရှိတာမို့ Error ပြတာ တွေ့ရမှာပါ။
? Character ကတော့ မည်သည့် Character တစ်လုံးကိုမဆို ကိုယ်စားပြုပါတယ်။ ကြည့်လိုက်ကြရအောင်နော်။
[] Brackets တွေကို မည်သည့် Characters တွေကြားဆိုသည့် Range (သို့) Character Classes တွေနှင့် တိုက်စစ်လိုတဲ့အခါ သုံးပါတယ်။ မတူညီတာ မကိုက်ညီတာတွေ Exception တွေ စစ်ချင်တဲ့အခါမှာတော့ POSIX Regular Expressions တွေမှာလို ! Character အစား ^ Character သုံးပါတယ်။
စမ်းကြည့်ဖို့အတွက် ဖိုင်အချို့ဖန်တီးပါမယ်။
[] Brackets တွေထဲမှာ Ranges တွေ ဖော်ပြဖို့ (–) ကိုသုံးပါတယ်။
Ranges တွေ အများကြီးလည်း ဖော်ပြနိုင်ပါတယ်။
အချို့ Characters တွေ စစ်ကြည့်ဖို့လည်း Square Brackets [] ကို သုံးနိုင်ပါတယ်။
Characters တချို့မှလွဲပြီး (Exception အဖြစ်) ကျန်တာတွေနှင့်တူတာကို စစ်ဖို့အတွက် ^ Character ကို သုံးပါမယ်။
အခုသင်ခန်းစာမှာ နောက်ဆုံးဖော်ပြမယ့်အပိုင်းကတော့ Character Classes အကြောင်းပါ။ Character Class တစ်ခုကိုစစ်ဖို့ရာ [:classname:] ကို သုံးပါမယ်။ ဥပမာ – Digit Class အတွက် ကိန်းဂဏန်းတွေကို စစ်ဖို့ အခုလိုသုံးပါမယ်။
Glob အဖြစ် file[[:digit:]a] ဟု ဖော်ပြသည်ဆိုလျင် file ရဲ့အနောက်မှာ digit (သို့) a ပါသော ပုံစံဖြင့် ကိုက်ညီမည် Match ဖြစ်မည်လို့ ဆိုလိုပါတယ်။
မိမိတို့ လက်ရှိရယူထားတဲ့ Language (Current Locale) ပေါ်မူတည်ပြီး ရနိုင်မယ့် Character Classes တွေရှိမှာပါ။ POSIX မှ Locales အားလုံးအတွက် အောက်ပါ Character Classes တွေ လိုအပ်ပါတယ်။
[:alnum:] | Letters and numbers |
[:alpha:] | Upper or lowercase letters |
[:blank:] | Spaces and tabs |
[:cntrl:] | Control characters, e.g. backspace, bell, NAK, escape |
[:digit:] | Numerals (0123456789) |
[:graph:] | Graphic characters (all characters except ctrl and the space character) |
[:lower:] | Lowercase letters (a-z) |
[:print:] | Printable characters (alnum, punct, and the space character) |
[:punct:] | Punctuation characters, i.e. !, &, “ |
[:space:] | Whitespace characters, e.g. tabs, spaces, newlines |
[:upper:] | Uppercase letters (A-Z) |
[:xdigit:] | Hexadecimal numerals (usually 0123456789abcdefABCDEF) |