گلوب (برنامه‌نویسی)

در برنامه‌نویسی کامپیوتری، الگوهای **گلوب** () مجموعه ای از نام فایل‌ها را با کاراکترهای عمومی مشخص می‌کنند. به عنوان مثال، دستور 
```bash
mv *.txt textfiles/
```
 که یک دستور پوسته Bash یونیکس است همه فایل‌هایی که انتهای نام‌شان به `.txt` ختم می‌شوند را از پوشه فعلی به پوشه `textfiles` منتقل می‌کند. در اینجا `*` یک علامت عمومی و `*.txt` یک الگوی **گلوب** است. علامت عمومی `*` در اینجا به معنی "هر رشته‌ای با هر طولی از جمله طول صفر، اما به استثنای کاراکترهای جداکننده مسیر (`/` در یونیکس و `\` در ویندوز)" است.

علامت عمومی رایج دیگر علامت سؤال (`?`) است که به معنای یک کاراکتر تک است. به عنوان مثال، 
```bash
mv ?.txt shorttextfiles/
```
 همه فایل‌هایی را که با یک کاراکتر به‌دنبال آن `.txt` نامگذاری شده‌اند، از فهرست فعلی به پوشه `shorttextfiles` دایرکتوری منتقل می‌کند، در حالی که 
```bash
??.txt
```
 با تمام فایل‌هایی که نام آنها از هر ۲ کاراکتر تشکیل شده است و به .txt

ختم می‌شوند، مطابقت دارد.

علاوه بر تطبیق نام فایل‌ها، از گلوب‌ها به‌طور گسترده برای تطبیق رشته‌های مختلف (تطبیق حروف عمومی) نیز استفاده می‌شود. در این عرصه یک مثال عام `fnmatch` است.

## خاستگاه
[بندانگشتی| تصویری از صفحه مرجع اصلی یونیکس ۱۹۷۱ برای <code>glob</code> - مالک <code>dmr</code> است، مخفف [دنیس ریچی .]]
دستور گلوب، مخفف *گلوبال*، از اولین نسخه‌های یونیکس آزمایشگاه بل سرچشمه می‌گیرد. مفسرهای دستور نسخه‌های اولیه یونیکس (نسخه‌های اول تا ششم، ۱۹۶۹–۱۹۷۵) به برنامه‌ای جداگانه متکی بودند تا کاراکترهای عمومی درون آرگومان‌های نقل قول نشده را به یک دستور گسترش دهد: */etc/glob*. آن برنامه گسترش را انجام می‌داد و لیست مسیرهای گسترش یافته را برای دستور، به منظور اجرا شدن، فراهم می‌کرد.

گلوب در اصل با زبان برنامه‌نویسی B نوشته شده بود. این اولین نرم‌افزار خط اصلی یونیکس بود که با استفاده از یک زبان برنامه‌نویسی سطح بالا توسعه یافت. بعدها، این قابلیت به صورت یک تابع کتابخانه زبان سی، `glob()` ارائه شد که توسط برنامه‌هایی مانند شل استفاده می‌شد. این تابع معمولاً با استفاده از تابعی دیگر به نام `fnmatch()` تعریف می‌شود. تابع `fnmatch()` تطابق دو رشته را برسی می‌کند. برنامه‌ای که از این تابع استفاده می‌کند می‌تواند بر روی مجموعه ای از رشته‌ها (معمولا نام فایل‌ها) حرکت کند تا مشخص کند کدام رشته‌ها مطابقت دارند. هر دو این توابع بخشی از پازیکس  هستند: توابع در POSIX.1 از سال ۲۰۰۱، و نوشتار آن‌ها در POSIX.2 تعریف شده است. ایده تعریف یک تابع تطبیق جداگانه با wildmat (تطابق کارت عمومی) که یک کتابخانه ساده برای تطبیق رشته در مقابل گلوب بش  است شروع شد.

به‌طور سنتی، گلوب‌ها با فایل‌های مخفی به شکل Dotfiles در یونیکس مطابقت ندارند. برای مطابقت با آنها، الگو مورد استفاده باید به الزاماً با نقطه (.) شروع شود`.` برای مثال، `*` با تمام فایل‌های قابل مشاهده تطابق دارد در حالی که `.` `*` با تمام فایل‌های مخفی تطابق خواهد داشت.

## نوشتار
رایج‌ترین حروف عمومی عبارتند از , ، و .

معمولاً، کاراکتر جداکننده مسیر ( در لینوکس/یونیکس، MacOS، و غیره یا  در ویندوز) هرگز مطابقت نخواهد داشت. برخی از شل‌ها، مانند Bash، قابلیت ای دارند که به کاربران اجازه می‌دهد تا این مورد را دور بزنند.

### شبه‌یونیکس
در سیستم‌های شبه یونیکس ,  به صورت بالا تعریف شده‌اند، در صورتی که  دو معنی اضافه دارد:

محدوده‌ها همچنین می‌توانند کلاس‌های کاراکتر از پیش تعریف‌شده، کلاس‌های هم ارز برای کاراکترهای تأکیدی، و نمادهای مشابه برای کاراکترهایی که تابپ کردن آن‌ها دشوار است را شامل شوند. آنها برای ترکیب با براکت‌ها در عبارت‌های منظم POSIX تعریف شده‌اند.

گلوبینگ  یونیکس طبق سنت POSIX توسط پوسته اداره می‌شود. گلوبینگ روی نام فایل‌ها در خط فرمان و در شل اسکریپت‌ها ارائه می‌شود. عبارت `case` که توسط پازیکس الزام شده در پوسته‌ها تطبیق الگو را با استفاده از الگوهای glob فراهم می‌کند.

برخی از پوسته‌ها (مانند پوسته C و Bash) از نوشتارهای اضافی که به با عنوان‌های متناوب یا گسترش شاخه شناخته می‌شود نیز پشتیبانی می‌کنند. از آنجایی این نوشتارهای اضافی بخشی از نوشتار گلوب نیستند، در `case` ارائه نشده‌اند. آن‌ها فقط در خط فرمان قبل از اجرای گلوبینگ گسترش می‌یابند.

پوسته بش از افزونه‌های زیر نیز پشتیبانی می‌کند:
* گلوبینگ گسترش یافته (extglob): به دیگر عملگرهای تطبیق الگو اجازه می‌دهد تا برای تطبیق چندین رخداد یک الگوی محصور درون پرانتز استفاده شوند. اساساً ستاره کلین گمشده و تناوب را برای توصیف زبان‌های معمولی فراهم می‌کند. با تنظیم گزینه  shell می‌توان آن را فعال کرد. این گزینه از ksh93 آمده است. گنو fnmatch و گلوب یک افزونه مشابه دارند.
* globstar: به `**` به تنهایی به عنوان یک جزء نام اجازه می‌دهد تا به صورت بازگشتی هر تعداد از لایه‌های پوشه‌های غیر مخفی را مطابقت دهد. همچنین توسط کتابخانه‌های JS و glob در Python پشتیبانی می‌شود.

[بندانگشتی| دستور [Dir| با الگوی glob در IBM PC DOS 1.0.]]
نسخه اصلی داس  مشابه سی‌پی/ام  بود که برای کار بر روی پردازنده‌های 8088 و ۸۰۸۶ اینتل طراحی شده بود. پوسته‌های ویندوز، به دنبال DOS، به‌طور سنتی هیج گسترش گلوب ای روی مقادیر ارسال شده به برنامه‌های خارجی انجام نمی‌دهند. شل‌ها می‌توانند از یک افزونه برای دستورات داخلی خود استفاده کنند:
* پاورشل ویندوز  تمام نوشتارهای رایج تعریف شده در بالا را بدون هیچ گونه افزودنی ای دارد.
* COMMAND.COM و cmd.exe اکثر نوشتارهای رایج را با برخی محدودیت‌ها دارند:  نوشتار برای هیچ‌یک وجود ندارد و برای COMMAND.COM نوشتار  فقط می‌تواند در انتهای الگو ظاهر شود و نمی‌تواند در وسط یک الگو بیاید، مگر بلافاصله قبل از نقطه جداکننده پسوند نام فایل.

برنامه‌های ویندوز و داس به‌جای پارامترهایی به سبک argv، یک رشته خط فرمان طولانی دریافت می‌کنند و انجام هرگونه تقسیم، نقل‌قول، یا گسترش با استفاده از گلوب وظیفه خودشان است. در واقع، هیچ روش ثابتی برای توصیف حروف عمومی در برنامه‌ها وجود ندارد، زیرا آنها آزاد هستند تا آنچه را که می‌خواهند انجام دهند. دو گسترش دهنده گلوب رایج عبارتند از:
* گسترش دهنده خط فرمان اجرا کننده C مایکروسافت (msvcrt)، که فقط از  و  پشتیبانی می‌کند. ReactOS (crt/misc/getargs.c) و Wine (msvcrt/data.c) هر دو شامل یک پیاده‌سازی منبع باز سازگار از  هستند، عملکردی که دور از چشم، در CRT اصلی خود کار می‌کند.
* گسترش دهنده خط فرمان Cygwin و MSYS  که پس از تقسیم آرگومان‌ها از روال  به سبک یونیکس استفاده می‌کند.

بیشتر بخش‌های دیگر ویندوز، از جمله سرویس نمایه گذاری، از روش استفاده شده توسط MS-DOS برای حروف عمومی که در CMD یافت می‌شود استفاده می‌کنند. یک یادگاری از زمان نام فایل ۸٫۳، این نوشتار توجه ویژه ای به نقاط در الگو و متن (نام فایل) دارد. در داخل، این کار با استفاده از سه حرف عمومی اضافی  انجام می‌شود. در سمت API ویندوز، معادل  است و  متناظر با زیربنای آن،  است. (یک آنالوگ fnmatch دیگر،  است) هر دوی این گسترش دهنده‌های منبع باز msvcrt از  استفاده می‌کنند، بنابراین ویژگی‌های نام فایل ۸٫۳، در آنها نیز اعمال می‌شوند.

### SQL
عملگر  در SQL معادل  و ، و نه  است.

اگرچه اصطلاح "گلوب" به‌طور کلی در جامعه SQL استفاده نمی‌شود، اما SQL استاندارد در عملگر `LIKE` خود از یک نوشتار شبه گلوب برای تطبیق رشته ساده استفاده می‌کند. علامت درصد () با صفر یا چند کاراکتر و زیرخط () دقیقاً با یک کاراکتر تطابق دارد.

بسیاری از پیاده‌سازی‌های SQL عملگر `LIKE` را گسترش داده‌اند تا به زبان تطبیق الگوی غنی‌تری دست یابند که محدوده کاراکترها ()، وجود نداشتن آنها، و عناصر عبارات منظم را در خود بگنجانند.

## در مقایسه با عبارات منظم
گلوب‌ها شامل نوشتاری برای ستاره کلین نیست که امکان تکرار چندگانه قسمت قبلی عبارت را فراهم می‌کند؛ بنابراین آنها عبارات منظم در نظر گرفته نمی‌شوند که (عبارات منظم) می‌تواند مجموعه کامل زبان‌های منظم را بر روی هر الفبای محدودی توصیف کند.

گلوب‌ها تلاش می‌کنند تا کل رشته را تطبیق دهند (به عنوان مثال،  با S.DOC و SA.DOC مطابقت دارد، اما نه با POST.DOC یا SURREY.DOCKS)، اگرچه، بسته به جزئیات پیاده‌سازی، عبارات منظم ممکن است با یک رشته زیرمجموعه مطابقت داشته باشند.

## پانویس
* 

رده:ابزارهای برنامه‌نویسی یونیکس
رده:تطبیق الگو
رده:کتابخانه پازیکس سی