دو نقطهٔ جادویی شل که هیچکاری نمیکنه
خلاصهٔ کاملتر
نویسنده میگه با اینکه بیشمار اسکریپت شل نوشته، هنوز به ترفندهایی برمیخوره که حسابی غافلگیرش میکنن؛ آخریش کاراکتر دو نقطه بوده. یه الگوی آشنا رو مثال میزنه: چک کردن آرگومان اجباری که معمولا با یه if چهارخطی نوشته میشه، و نشون میده همون کارو میشه تو یه خط انجام داد:
: "${1:?missing argument, aborting.}"
echo "Hello $1!"اینجا دو تا اتفاق میافته: بخش ${name:?diagnostic} یه بسط پارامتره که چک میکنه اگه متغیر خالی یا تنظیمنشده باشه، پیام رو رو stderr چاپ کنه و شل با کد غیرصفر خارج بشه؛ وگرنه مثل خودِ مقدار متغیر عمل میکنه. کاراکتر دو نقطه هم همون «فرمان تهی»ه: یه بیلتاین که کاری نمیکنه جز ارزیابی آرگومانها و دور انداختن نتیجهشون.
به گفتهٔ نویسنده، این کاراکتر خیلی قدیمیه و به شل تامپسون سال ۱۹۷۱ برمیگرده که اون موقع هم نقش برچسب رو داشت هم اولین نشانگر کامنت یونیکس بود. کاربردهای دیگهشم نشون میده: مثلا باهاش میشه به یه متغیر مقدار پیشفرض داد بدون اینکه نتیجه بهعنوان فرمان اجرا بشه، یا یه فایل رو خالی کرد، یا جایی که گرامر شل حتما یه فرمان میخواد ولی تو نمیخوای کاری بشه، ازش بهعنوان no-op استفاده کرد.
نویسنده خودش هم اعتراف میکنه که خیلی از این مثالها عمدا خیلی سادهن و ممکنه خوانایی رو کم کنن، ولی نکته اینه که وقتی تو موقعیتی هستی که یه فرمان لازمه اما هیچ کاری نباید انجام بشه، فرمان تهی دقیقا همون چیزیه که میخوای. حتی یه کاربرد واقعی رو نقل میکنه که یکی از دو نقطه بهعنوان EDITOR تو گیت برای ریبیس تعاملی سریع استفاده میکنه.
نکات کلیدی:
- دو نقطه همون «فرمان تهی»ه؛ آرگومانها رو ارزیابی میکنه ولی نتیجه رو دور میندازه
- ${name:?message} برای چک آرگومان اجباری تو یه خط
- کاربردها: مقدار پیشفرض، خالی کردن فایل، no-op جایی که فرمان لازمه
- ترفندی قدیمی که به شل تامپسون ۱۹۷۱ برمیگرده




