הרחבות באש וקליפה: עריכת רשימה עצלה

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

רק שלא כל זה משתגע לגמרי, עליכם להכין כמה רשימות מתנות. בש יכול לעזור.

הרחבת הסד

אלה אינם סוגריים: ()

גם אלה אינם: []

אלה סוגריים:{}

הפלטה אומרת לבש לעשות משהו עם המיתר השרירותי או המיתרים שהוא מוצא ביניהם. מחרוזות מרובות הם מופרדים בפסיק: {a,b,c}. אתה יכול גם להוסיף הקדמה אופציונלית וכתיבת פוסט שתצורף לכל תוצאה מורחבת. לרוב, הדבר יכול לחסוך מעט הקלדות, למשל עם נתיבי קבצים והרחבות נפוצות.

בואו נערוך כמה רשימות לכל אדם שאנחנו רוצים לתת לו דברים. הפקודות הבאות שוות ערך:

touch /home/me/gift-lists/Amy.txt /home/me/gift-lists/Bryan.txt /home/me/gift-lists/Charlie.txt
touch /home/me/gift-lists/{Amy,Bryan,Charlie}.txt
tree gift-lists /home/me/gift-lists ├── Amy.txt ├── Bryan.txt └── Charlie.txt

הו אלוהים, "בריאן" מאיית את שמו ב"אני ". אני יכול לתקן את זה.

mv /home/me/gift-lists/{Bryan,Brian}.txt renamed '/home/me/gift-lists/Bryan.txt' -> '/home/me/gift-lists/Brian.txt'

הרחבות של פרמטר מעטפת

הרחבת פרמטר מעטפת מאפשרת לנו לבצע כל מיני שינויים בפרמטרים הסגורים בסוגרים, כמו לטפל ולהחליף טקסט.

יש כמה גרבונים גרביים שמגיעים לכל הגופנים שלנו. בואו נהפוך את זה למשתנה:

STUFF=$'socks\nlump of coal\nwhite chocolate' echo "$STUFF" socks lump of coal white chocolate

עכשיו כדי להוסיף פריטים אלה לכל אחת מהרשימות שלנו עם קצת עזרה teeמהפקודה להשיג echoוהרחבות לשחק נחמד.

echo "$STUFF" | tee {Amy,Brian,Charlie}.txt cat {Amy,Brian,Charlie}.txt socks lump of coal white chocolate socks lump of coal white chocolate socks lump of coal white chocolate

החלפת התאמת תבניות

במחשבה שנייה, אולי גוש הפחם אינו מתנה כל כך נחמדה. אתה יכול להחליף אותו במשהו טוב יותר באמצעות החלפת התאמת תבנית בצורה של ${parameter/pattern/string}:

echo "${STUFF/lump of coal/candy cane}" | tee {Amy,Brian,Charlie}.txt cat {Amy,Brian,Charlie}.txt socks candy cane white chocolate socks candy cane white chocolate socks candy cane white chocolate

זה מחליף את המקרה הראשון של "גוש פחם" ל"מקל סוכריות ". כדי להחליף את כל המופעים (אם היו מרובים), השתמש ${parameter//pattern/string}. זה לא משנה את $STUFFהמשתנה שלנו , ולכן אנחנו עדיין יכולים לעשות שימוש חוזר ברשימה המקורית עבור מישהו שובב אחר כך.

תת-מיתרים

בזמן שאנחנו משפרים דברים, יתכן שהגיפטוסים שלנו לא יאהבו שוקולד לבן. מוטב שנוסיף שוקולד רגיל לרשימות שלנו לכל מקרה. מכיוון שאני עצלן במיוחד, אני פשוט הולך ללחוץ על החץ למעלה ולשנות פקודת Bash קודמת. למרבה המזל, המילה האחרונה $STUFFבמשתנה היא "שוקולד" שאורכו תשע תווים, אז אני אגיד לבש להמשיך להשתמש רק בחלק הזה ${parameter:offset}. אשתמש teeים" -aדגל כדי append לרשימות הקיימות שלי:

echo "${STUFF: -9}" | tee -a {Amy,Brian,Charlie}.txt cat {Amy,Brian,Charlie}.txt socks candy cane white chocolate chocolate socks candy cane white chocolate chocolate socks candy cane white chocolate chocolate

אתה יכול גם:

תעשה את זה עם זה
קבל תחום משנה מ- n תווים ואילך ${parameter:n}
קבל תחומי משנה עבור x תווים החל מ- n ${parameter:n:x}

שם! כעת רשימות הבסיס שלנו הסתיימו. שיהיה לנו מעט ביצה.

בדיקת משתנים

אתה יודע, זה אולי ביצה, אבל אני חושב שהקמתי אתמול רשימה עבור איימי ואחסנתי אותה במשתנה שאולי הייתי קורא לו amy. בוא נראה אם ​​עשיתי את זה. אשתמש ${parameter:?word}בהרחבה. זה יכתוב wordלשגיאה רגילה ויצא אם אין amyפרמטר.

echo "${amy:?no such}" bash: amy: no such

אני מניח שלא. אולי זה היה בריאן במקום?

echo "${brian:?no such}" Lederhosen

אתה יכול גם:

תעשה את זה עם זה
החלף wordאם parameterהוא לא מוגדר או אפס ${parameter:-word}
החלף wordאם parameterהוא לא מוגדר או אפס ${parameter:+word}
הקצאה wordכדי parameterאם parameterאינה מוגדרת או null ${parameter:=word}

משנה תיק

זה נכון! בריאן אמר שהוא רוצה קצת לדרנהוזן ולכן רשמתי לעצמי פתק. זה די חשוב, אז אוסיף את זה לרשימה של בריאן באותיות גדולות עם ${parameter^^pattern}הרחבה. patternהחלק הוא אופציונאלי. אנחנו כותבים רק לרשימה של בריאן, אז פשוט אשתמש >>במקום tee -a.

echo "${brian^^}" >> Brian.txt cat Brian.txt socks candy cane white chocolate chocolate LEDERHOSEN

אתה יכול גם:

תעשה את זה עם זה
אות באות ראשונה באותיות רישיות ${parameter^pattern}
אות קטנה באות קטנה ${parameter,pattern}
אותיות קטנות של כל האותיות ${parameter,,pattern}

מערכים מרחיבים

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

gifts=(sweater gameboy wagon pillows chestnuts hairbrush)

אני יכול להשתמש בהרחבת מזרקים בצורה של ${parameter:offset:length}כדי להפוך את זה לפשוט. אוסיף את השניים הראשונים לרשימת איימי, את האמצעיים לרשימת בריאן ואת השניים האחרונים לרשימת צ'רלי. אשתמש printfבכדי לעזור בקווים חדשים.

printf '%s\n' "${gifts[@]:0:2}" >> Amy.txt printf '%s\n' "${gifts[@]:2:2}" >> Brian.txt printf '%s\n' "${gifts[@]: -2}" >> Charlie.txt
cat Amy.txt socks candy cane white chocolate chocolate sweater gameboy cat Brian.txt socks candy cane white chocolate chocolate LEDERHOSEN wagon pillows cat Charlie.txt socks candy cane white chocolate chocolate chestnuts hairbrush

There! Now we’ve got a comprehensive set of super personalized gift lists. Thanks Bash! Too bad it can’t do the shopping for us, too.