این مقاله ممکن است حاوی ترجمهٔ تقریبی از زبانی دیگر باشد و ممکن است کل یا بخشی از متن آن توسط یک رایانه یا مترجمهای ماشینی تولید شده باشد. |
در برنامهنویسی کامپیوتری، الگوهای گلوب (/ɡlɒb/) مجموعه ای از نام فایلها را با کاراکترهای عمومی مشخص میکنند. به عنوان مثال، دستور mv *.txt textfiles/
که یک دستور پوسته Bash یونیکس است همه فایلهایی که انتهای نامشان به .txt
ختم میشوند را از پوشه فعلی به پوشه textfiles
منتقل میکند. در اینجا *
یک علامت عمومی و *.txt
یک الگوی گلوب است. علامت عمومی *
در اینجا به معنی "هر رشتهای با هر طولی از جمله طول صفر، اما به استثنای کاراکترهای جداکننده مسیر (/
در یونیکس و \
در ویندوز)" است.
علامت عمومی رایج دیگر علامت سؤال (?
) است که به معنای یک کاراکتر تک است. به عنوان مثال، mv ?.txt shorttextfiles/
همه فایلهایی را که با یک کاراکتر بهدنبال آن .txt
نامگذاری شدهاند، از فهرست فعلی به پوشه shorttextfiles
دایرکتوری منتقل میکند، در حالی که ??.txt
با تمام فایلهایی که نام آنها از هر ۲ کاراکتر تشکیل شده است و به .txt
ختم میشوند، مطابقت دارد.
علاوه بر تطبیق نام فایلها، از گلوبها بهطور گسترده برای تطبیق رشتههای مختلف (تطبیق حروف عمومی) نیز استفاده میشود. در این عرصه یک مثال عام fnmatch
است.
دستور گلوب، مخفف گلوبال(به انگلیسی: global)، از اولین نسخههای یونیکس(به انگلیسی: Unix) آزمایشگاه بل سرچشمه میگیرد.[۱] مفسرهای دستور نسخههای اولیه یونیکس (نسخههای اول تا ششم، ۱۹۶۹–۱۹۷۵) به برنامهای جداگانه متکی بودند تا کاراکترهای عمومی درون آرگومانهای نقل قول نشده را به یک دستور گسترش دهد: /etc/glob. آن برنامه گسترش را انجام میداد و لیست مسیرهای گسترش یافته را برای دستور، به منظور اجرا شدن، فراهم میکرد.
گلوب در اصل با زبان برنامهنویسی B نوشته شده بود. این اولین نرمافزار خط اصلی یونیکس بود که با استفاده از یک زبان برنامهنویسی سطح بالا توسعه یافت.[۲] بعدها، این قابلیت به صورت یک تابع کتابخانه زبان سی{{به انگلیسی | C}}، glob()
ارائه شد که توسط برنامههایی مانند شل استفاده میشد. این تابع معمولاً با استفاده از تابعی دیگر به نام fnmatch()
تعریف میشود. تابع fnmatch()
تطابق دو رشته را برسی میکند. برنامهای که از این تابع استفاده میکند میتواند بر روی مجموعه ای از رشتهها (معمولا نام فایلها) حرکت کند تا مشخص کند کدام رشتهها مطابقت دارند. هر دو این توابع بخشی از پازیکس {{به انگلیسی | POSIX}} هستند: توابع در POSIX.1 از سال ۲۰۰۱، و نوشتار آنها در POSIX.2 تعریف شده است.[۳][۴] ایده تعریف یک تابع تطبیق جداگانه با wildmat (تطابق کارت عمومی) که یک کتابخانه ساده برای تطبیق رشته در مقابل گلوب بش {{به انگلیسی | bash}} است شروع شد.
بهطور سنتی، گلوبها با فایلهای مخفی به شکل Dotfiles در یونیکس مطابقت ندارند. برای مطابقت با آنها، الگو مورد استفاده باید به الزاماً با نقطه (.) شروع شود.
برای مثال، *
با تمام فایلهای قابل مشاهده تطابق دارد در حالی که .
*
با تمام فایلهای مخفی تطابق خواهد داشت.
رایجترین حروف عمومی عبارتند از *
, ?
، و […]
.
علامت | شرح | مثال | مطابقت دارد | مطابقت ندارد |
---|---|---|---|---|
*
|
با هر تعداد کاراکتر از حرفها از جمله هیچ حرف مطابقت دارد | Law*
|
Law , Laws ، یا Lawyer
|
GrokLaw , La ، یا aw
|
*Law*
|
Law , GrokLaw , یا Lawyer .
|
La یا aw
| ||
?
|
با هر کاراکتر تک مطابقت دارد | ?at
|
Cat , cat , Bat یا bat
|
at
|
[abc]
|
با یکی از کاراکتر داده شده درون براکت مطابقت دارد | [CB]at
|
Cat یا Bat
|
cat , bat یا CBat
|
[a-z]
|
با یک کاراکتر از محدوده داده شده در براکت مطابقت دارد | Letter[0-9]
|
Letter0 , Letter1 , Letter2 تا Letter9
|
Letters , Letter یا Letter10
|
معمولاً، کاراکتر جداکننده مسیر (/
در لینوکس/یونیکس، MacOS، و غیره یا \
در ویندوز) هرگز مطابقت نخواهد داشت. برخی از شلها، مانند Bash، قابلیت ای دارند که به کاربران اجازه میدهد تا این مورد را دور بزنند.[۵]
در سیستمهای شبه یونیکس *
, ?
به صورت بالا تعریف شدهاند، در صورتی که […]
دو معنی اضافه دارد:[۶][۷]
علامت | شرح | مثال | مسابقات | مطابقت ندارد |
---|---|---|---|---|
[!abc]
|
با یک کاراکتر که در براکت ذکر نشده است مطابقت دارد | [!C]at
|
Bat , bat یا cat
|
Cat
|
[!a-z]
|
با یک کاراکتر مطابقت دارد که از محدوده داده شده در براکت نیست | Letter[!۳-۵]
|
Letter1 ، Letter2 ، Letter6 تا Letter9 و Letterx و غیره.
|
Letter3 ، Letter4 ، Letter5 یا Letterxx
|
محدودهها همچنین میتوانند کلاسهای کاراکتر از پیش تعریفشده، کلاسهای هم ارز برای کاراکترهای تأکیدی، و نمادهای مشابه برای کاراکترهایی که تابپ کردن آنها دشوار است را شامل شوند. آنها برای ترکیب با براکتها در عبارتهای منظم POSIX تعریف شدهاند.[۶][۷]
گلوبینگ {{به انگلیسی | globbing}} یونیکس طبق سنت POSIX توسط پوسته اداره میشود. گلوبینگ روی نام فایلها در خط فرمان و در شل اسکریپتها ارائه میشود. عبارت case
که توسط پازیکس الزام شده در پوستهها تطبیق الگو را با استفاده از الگوهای glob فراهم میکند.
برخی از پوستهها (مانند پوسته C و Bash) از نوشتارهای اضافی که به با عنوانهای متناوب یا گسترش شاخه شناخته میشود نیز پشتیبانی میکنند. از آنجایی این نوشتارهای اضافی بخشی از نوشتار گلوب نیستند، در case
ارائه نشدهاند. آنها فقط در خط فرمان قبل از اجرای گلوبینگ گسترش مییابند.
پوسته بش از افزونههای زیر نیز پشتیبانی میکند:[۸]
extglob
shell میتوان آن را فعال کرد. این گزینه از ksh93 آمده است.[۹] گنو fnmatch و گلوب یک افزونه مشابه دارند.**
به تنهایی به عنوان یک جزء نام اجازه میدهد تا به صورت بازگشتی هر تعداد از لایههای پوشههای غیر مخفی را مطابقت دهد.[۹] همچنین توسط کتابخانههای JS و glob در Python پشتیبانی میشود.نسخه اصلی داس {{به انگلیسی | DOS}} مشابه سیپی/ام {{به انگلیسی | CP/M}} بود که برای کار بر روی پردازندههای 8088 و ۸۰۸۶ اینتل طراحی شده بود. پوستههای ویندوز، به دنبال DOS، بهطور سنتی هیج گسترش گلوب ای روی مقادیر ارسال شده به برنامههای خارجی انجام نمیدهند. شلها میتوانند از یک افزونه برای دستورات داخلی خود استفاده کنند:
[…]
نوشتار برای هیچیک وجود ندارد و برای COMMAND.COM نوشتار *
فقط میتواند در انتهای الگو ظاهر شود و نمیتواند در وسط یک الگو بیاید، مگر بلافاصله قبل از نقطه جداکننده پسوند نام فایل.برنامههای ویندوز و داس بهجای پارامترهایی به سبک argv، یک رشته خط فرمان طولانی دریافت میکنند و انجام هرگونه تقسیم، نقلقول، یا گسترش با استفاده از گلوب وظیفه خودشان است. در واقع، هیچ روش ثابتی برای توصیف حروف عمومی در برنامهها وجود ندارد، زیرا آنها آزاد هستند تا آنچه را که میخواهند انجام دهند. دو گسترش دهنده گلوب رایج عبارتند از:[۱۱]
?
و *
پشتیبانی میکند.[۱۲] ReactOS (crt/misc/getargs.c) و Wine (msvcrt/data.c) هر دو شامل یک پیادهسازی منبع باز سازگار از __getmainargs
هستند، عملکردی که دور از چشم، در CRT اصلی خود کار میکند.dcrt0.cc
که پس از تقسیم آرگومانها از روال glob()
به سبک یونیکس استفاده میکند.بیشتر بخشهای دیگر ویندوز، از جمله سرویس نمایه گذاری، از روش استفاده شده توسط MS-DOS برای حروف عمومی که در CMD یافت میشود استفاده میکنند. یک یادگاری از زمان نام فایل ۸٫۳، این نوشتار توجه ویژه ای به نقاط در الگو و متن (نام فایل) دارد. در داخل، این کار با استفاده از سه حرف عمومی اضافی <>"
انجام میشود. در سمت API ویندوز، glob()معادل FindFirstFile است و fnmatch() متناظر با زیربنای آن، RtlIsNameInExpression است.[۱۳] (یک آنالوگ fnmatch دیگر، PathMatchSpec است) هر دوی این گسترش دهندههای منبع باز msvcrt از FindFirstFile استفاده میکنند، بنابراین ویژگیهای نام فایل ۸٫۳، در آنها نیز اعمال میشوند.
عملگر LIKE
در SQL معادل ?
و *
، و نه […]
است.
حروف عام رایج | حروف SQL | شرح |
---|---|---|
?
|
_
|
با هر کاراکتر تک مطابقت دارد |
*
|
%
|
با هر تعداد کاراکتر از جمله صفر کاراکتر مطابقت دارد |
اگرچه اصطلاح "گلوب" بهطور کلی در جامعه SQL استفاده نمیشود، اما SQL استاندارد در عملگر LIKE
خود از یک نوشتار شبه گلوب برای تطبیق رشته ساده استفاده میکند. علامت درصد (%
) با صفر یا چند کاراکتر و زیرخط (_
) دقیقاً با یک کاراکتر تطابق دارد.
بسیاری از پیادهسازیهای SQL عملگر LIKE
را گسترش دادهاند تا به زبان تطبیق الگوی غنیتری دست یابند که محدوده کاراکترها ([…]
)، وجود نداشتن آنها، و عناصر عبارات منظم را در خود بگنجانند.[۱۴]
گلوبها شامل نوشتاری برای ستاره کلین نیست که امکان تکرار چندگانه قسمت قبلی عبارت را فراهم میکند؛ بنابراین آنها عبارات منظم در نظر گرفته نمیشوند که (عبارات منظم) میتواند مجموعه کامل زبانهای منظم را بر روی هر الفبای محدودی توصیف کند.
حروف عام رایج | عبارت منظم معادل |
---|---|
?
|
.
|
*
|
. *
|
گلوبها تلاش میکنند تا کل رشته را تطبیق دهند (به عنوان مثال، S*.DOC
با S.DOC و SA.DOC مطابقت دارد، اما نه با POST.DOC یا SURREY.DOCKS)، اگرچه، بسته به جزئیات پیادهسازی، عبارات منظم ممکن است با یک رشته زیرمجموعه مطابقت داشته باشند.