منبع اصلی نوشتار زیر در این لینک قرار دارد

پرسش و پاسخ شماره ۱۶


پرسش و پاسخ‌های رایج Bash  در Greg\'s Wiki

پرسش و پاسخ شماره ۱۶

چگونه می‌توانم از AND/OR/NOT منطقی در الگو(جانشین) پوسته استفاده کنم؟

\"Glob\"ها الگوهای ساده‌ای هستند که می‌توانند برای مطابقت نام فایلها و رشته‌ها به کار بروند. به طور معمول آنها خیلی قدرتمند نمی‌باشند. اگر قدرت بیشتری لازم دارید، چند گزینه در دسترس است.

اگر می‌خواهید بر تمام فایلهای که با جانشین A یا جانشین B مطابقت دارند عمل کنید، فقط هر دو را در یک سطر قرار بدهید:

rm -- *.bak *.old

اگر می‌خواهید یک OR منطقی فقط در قسمتی از جانشین به کار ببرید(بزرگتر از یک کاراکتر منفرد -- برای مورد یک کاراکتری، کلاسهای کاراکتر داخل کروشه کفایت می‌کند)، در Bash، می‌توانید از بسط ابرو استفاده کنید:

rm -- *.{bak,old}

اگر موردی بازهم بیشتر عمومی و قدرتمند نیاز دارید، در KornShell یا BASH می‌توانید از جانشین‌های توسعه‌یافته استفاده کنید. در Bash، لازم است گزینه extglob تنظیم باشد. به این ترتیب می‌توند کنترل شود:

shopt extglob

و به این ترتیب تنظیم می‌شود:

shopt -s extglob

برای دست‌گرمی، تمام فایلهایی که با foo شروع می‌شوند و به ‎ .d‎ ختم نمی‌شوند را به دایرکتوری ‎ foo_thursday.d‎ منتقل می‌کنیم:

mv foo!(*.d) foo_thursday.d

یک مثال پیچیده‌تر -- حذف تمام فایلهایی که نام آنها شامل Pink_Floyd و هچنین فاقد The_Final_Cut باشد:

rm !(!(*Pink_Floyd*)|*The_Final_Cut*)

ضمناً: این نوع از الگوها می‌توانند با KornShell نیز به کار بروند. در آنجا نیازی به فعال کردن نیست، بلکه الگوهای پیش‌فرض هستند.


CategoryShell

پرسش و پاسخ 16 (آخرین ویرایش ‎ 2009-12-30 17:14:33 ‎ توسط MatthiasPopp)




به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد