یاد بگیرید برنامه نویسی کنید: تفاوت بین [و [[در Bash چیست؟


پاسخ 1:

چند راز برای شما تعریف خواهم کرد. ضرب و شتم اول یک اثر مشتق است. کارکردهای اصلی برنامه توسط پوسته بورن توسط استفن بورن الهام گرفته شده است. هدف اصلی Bourne Again Shell (Bash) اجرای مجدد مجموعه ای از ویژگی های سازگار و نحو به عنوان نرم افزار رایگان FSF GNU بود. دستور [یا آزمون نیز یک عملکرد داخلی پوسته اصلی بورن نبود. GNU معادل دستور خارجی / bin / test و [پیوند آن هنوز به عنوان بخشی از برنامه های اصلی GNU در لینوکس نصب شده است.

دستور آزمون و [نام مستعار] آن در نسخه های مدرن bash یکپارچه شده است. بیشترین معناشناسی دستور خارجی را تقلید می کند. مانند هر دستوری که در Bash ساخته شده است ، می توانید ویژگی مورد نظر را فعال یا غیرفعال کنید و یا حتی در یک هوی و هوس.

این جایی است که [[وارد بازی می شود. این یک دستور داخلی ساخته شده در آزمون (نحو) است. می توانید صفحات این مرد را برای جزئیات بیشتر بخوانید ، اما کمی ظریف هستند.

به عنوان مثال ، من می دانم که [[از جستجوی عبارات منظم پشتیبانی می کند. یادم نمی آید کی اضافه شد ، شاید در Bash4 باشد. من فکر نمی کنم که آزمایش داخلی یا نسخه خارجی از این مقایسه پشتیبانی کند (شما باید از جایگزینی دستور استفاده کنید و مثلاً بررسی کنید که از طریق فیلتر چیست).

کلید برداشتن: بسیاری از سؤالات و ویژگیهای موجود در bash فقط در صورتی معنی دار می شوند که در یک زمینه تاریخی مشاهده شوند ، چگونگی نوشتن نامه و بهبود آن در مدت زمان طولانی. پوسته اصلی بورن تقریباً پنجاه سال پیش نوشته شده است.


پاسخ 2:

در عمل ، تفاوت زیادی بین رمزگذاری [] (براکت های منفرد) و [[]] (براکت های دوتایی) در عبارات شرطی در bash وجود ندارد. (البته فقط در پرانتزهای آرایه می توان از پرانتزهای مجرد استفاده کرد.)

داستان پوسته ها این است که پوسته قدیمی C دارای تنظیمات براکت واحد بوده و بعداً پوسته هایی را توسعه داده است که به دلایل سازگاری از این پشتیبانی می کند. (اگر واقعاً می خواهید به مدرسه قدیمی بروید ، از آزمون استفاده کنید ... اما از لطف من!) با پیکربندی جدید براکت دوبل ، پیشرفتهای خاصی را می توان به راحتی معرفی کرد. بهبود نکته این است که اپراتورهای تغییر مسیر ( ) دیگر نیازی به نقاب زدن نیست.

از نظر فنی ، [و] یک پوسته داخلی است ، در حالی که [و] کلمات کلیدی هستند. در نتیجه ، هر پوسته برای پشتیبانی از [(سازگار با POSIX) تضمین شده است. آزمایش های پشتیبانی شده توسط [[ممکن است از محیط به محیط دیگر متفاوت باشد.

اتفاقاً ، اغلب موارد برنامه نویسی با ماهیت فنی خاصی در سایت StackExchange مطرح می شود. با توجه به این نکته ، می توانید مطالعه کنید که تفاوت بین براکت های دو و یک مربع در bash چیست.