Bash خودش نمیتواند عبارتهای منظم را تشخیص دهد. داخل اسکریپتها، این فرمانها و برنامهها -- از قبیل sed و awk -- هستند که عبارتهای منظم را تفسیر میکنند.
Bash بسط نامفایل [1] را انجام میدهد -- پردازشی که با عنوان globbing شناخته میشود -- اما این بسط از مجموعه عبارت منظم استاندارد استفاده نمیکند. در عوض، globbing را تشخیص میدهد و کاراکترهای عام را بسط میدهد. Globbing، کاراکترهای عام استاندارد[2] -- * و ?، لیستهای کاراکتر داخل براکتهای مربعی، و برخی کاراکترهای خاص دیگر (از قبیل ^ برای منفی نمودن معنی انطباق) -- را تفسیر میکند. به هرحال در globbing محدودیتهای با اهمیتی روی کاراکترهای عام وجود دارد. رشتههای شامل * با نام فایلهایی که با یک نقطه شروع میگردند، به عنوان مثال، مانند .bashrc، مطابقت نمیکنند. [3] به همچنین، کاراکتر ? در globbing دارای معنای متفاوت از آن به عنوان بخشی از یک RE است.
bash$ ls -l total 2 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l t?.sh -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh bash$ ls -l [ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 bash$ ls -l [a-c]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 a.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 bash$ ls -l [^ab]* -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 466 Aug 6 17:48 t2.sh -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt bash$ ls -l {b*,c*,*est*} -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 b.1 -rw-rw-r-- 1 bozo bozo 0 Aug 6 18:42 c.1 -rw-rw-r-- 1 bozo bozo 758 Jul 30 09:02 test1.txt
Bash روی شناسههای خطفرمان نقلقولی نشده، بسط نامفایل را انجام میدهد. فرمان echo این مطلب را به اثبات میرساند.
bash$ echo * a.1 b.1 c.1 t2.sh test1.txt bash$ echo t* t2.sh test1.txt bash$ echo t?.sh t2.sh
تغییر دادن روشی که Bash در globbing کاراکترهای خاص را تفسیر میکند، امکانپذیر است. یک فرمان set -f عمل globbing را غیر فعال میکند، و گزینههای nocaseglob و nullglob برای shopt رفتار globbing را تغییر میدهند. |
همچنین مثال 11-5 را ببینید.
نامفایلهای دارای فضای سفید میتوانند باعث globbing با اشکال بشوند. David Wheeler چگونگی پرهیز از بسیاری دامهای از این قبیل را نشان میدهد. IFS="$(printf '\n\t')" # |
[1] | بسط نامفایل یعنی بسط دادن الگوهای نامفایل یا قالبهای شامل کاراکترهای خاص. برای مثال، example.??? میتواند به example.001 و/یا example.txt بسط بیابد. |
[2] | یک کاراکتر عام، قابل قیاس با یک ژوکر در بازی ورق، میتواند (تقریباً) هر کاراکتر دیگری را نمایندگی کند. |
[3] | بسط نامفایل میتواند با نام فایلهای نقطهای مطابقت نماید، اما فقط در صورتیکه الگو به طور مشخص شامل نقطه به عنوان یک کاراکتر لفظی باشد. ~/[.]bashrc # |