למידת תכנות: מה ההבדל בין [ל [[בבש?


תשובה 1:

אני הולך להכניס לך כמה סודות. בסיס ראשון הוא יצירה נגזרת. תכונות הבסיס שלה נוצרו בהשראת מעטפת בורן על ידי סטיבן בורן. הכוונה המקורית של "שוב פגז בורן" (bash) הייתה ליישם מחדש מערך תכונות תואם ותחביר, כתוכנה חופשית של FSF GNU. כמו כן פקודת [או הבדיקה לא הייתה תכונה מובנית של קליפת הבורן המקורית. מקבילה של GNU לפקודה החיצונית / bin / test, והקישור [שלה עדיין מותקן בלינוקס כחלק מתשתית הליבה של GNU

בגרסאות מודרניות של bash פקודת הבדיקה, וכינויה מובנית. MESTLY מחקה את הסמנטיקה של הפקודה החיצונית. כמו כל פקודה מובנית בסיווג, תוכלו להשבית ולהפעיל לפי הצורך, או אפילו בגחמה.

כאן [[נכנס. זו פקודת מבחן משופרת (תחביר) משופרת). אתה יכול לקרוא את דפי האיש לפרטים נוספים, אך הם מעט עדינים.

לדוגמה, אני יודע ש [[תומך בהתאמת ביטויים רגילה. אני לא זוכר מתי התווסף לזה, אולי כבר בבאש 4. אני לא חושב שהמבחן המובנה, וגם לא הגרסה החיצונית, תומכים בהשוואה זו (תצטרך להשתמש ב- grep בתחליף פקודה ולבדוק מה עבר דרך המסנן, למשל).

הסרת המפתח: הרבה מאוד מוזרויות ותכונות בסגנון הגיוני רק הגיוניות כאשר הן נראות בהקשר ההיסטורי של אופן הכתיבה והשיפור של הבש לאורך זמן רב. מעטפת הבורן המקורית נכתבה לפני כמעט חמישים שנה.


תשובה 2:

בפועל אין הרבה הבדל בין קידוד [] (סוגריים בודדים) ו- [[]] (סוגריים כפולים) בביטויים מותנים בסל. (כמובן שניתן להשתמש רק בסוגריים יחידים בהתייחסות למערכים.)

ההיסטוריה של הקליפות היא שלקליפת ה- C הישנה הייתה הגדרת הסוגר היחיד, ולכן פגזים שפותחו מאוחר תומכים בה לצורך תאימות. (אם אתה באמת רוצה ללכת לבית ספר ישן, השתמש במבחן ... אבל Sheesh!) ההתקנה של הסוגריים הכפולים החדשה אפשרה להציג שיפורים מסוימים בקלות. שיפור אחד של ההערה הוא שמפעילי הפניה מחדש (<ו->) כבר לא צריכים לברוח.

טכנית [ו-] הם מעטפת מובנית ואילו [[ו-]] הם מילות מפתח. אחת התוצאות של זה היא שמובטחת שכל קליפה תומכת [(היא תואמת POSIX). כמו כן הבדיקות הנתמכות על ידי [[עשויות להשתנות מסביבה לסביבה.

BTW, שאלות תכנות בעלות אופי טכני ספציפי מטופלות לרוב היטב באתר StackExchange. בעורק זה תוכלו להתייעץ מה ההבדל בין סוגריים מרובעים כפולים בודדים בסף ?.