Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

טיפים - ניצול "פרישת" פרמטרים ב-bash

mksoft - 22/07/2007 - 01:07
נושא ההודעה: ניצול "פרישת" פרמטרים ב-bash
ל-bash יש יכולות "לפרוש" פרמטרים לפני שהם מועברים לפקודה עצמה. דוגמא:

אם שינוי סיומת קובץ נכתבת ברגיל כך:
קוד:
mv aaa.pt aaa.py

בעזרת bash נוכל לכתוב זאת:
קוד:
mv aaa.{pt,py}


איך זה עובד ? לפני ש-bash מעביר את הפרמטרים לפקודה הוא פורש אותם. נראה לדוגמא את הפלט של הפקודה הבאה:
קוד:
$ echo aaa.{pt,py}
aaa.pt aaa.py


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

כל מה שמופיע בסוגריים המסולסלות נפרש. ניתן לנצל זאת גם כאשר רוצים ליצור עץ ספריות חדש.

נניח שאנו רוצים ליצור את מבנה התיקיות הבא:
קוד:
+ parent1
    - child1
    - child5
    - child9
+ parent2
    - sub1
    - sub2


נוכל לרשום זאת בתור:
קוד:
mkdir -p parent1/child{1,5,9} parent2/sub{1,2}

Anonymous - 22/07/2007 - 12:59
נושא ההודעה: וגם
קוד:

echo a{1..5}


יחזיר

a1 a2 a3 a4 a5

שימושי להפליא בלולאות for
mksoft - 22/07/2007 - 13:25
נושא ההודעה:
הרסת לי את הטיפ הבא Wink

רציתי לכתוב על זה ועל ההבדל בינו לבין seq.
elcuco - 22/07/2007 - 21:44
נושא ההודעה:
אם כבר, תסביר איך ב-seq עושים שלמספים יהיה leading zeros.

למשל 007, 008, 009, 010, 011 וכו'.
mksoft - 23/07/2007 - 00:07
נושא ההודעה:
קוד:
seq -w 30


ניתן להשתמש בתחביר printf לצירופים מורכבים יותר:

קוד:
seq -f "%04.0f" 20
seq -f "image_%05.0f.png" 30

omri - 23/04/2008 - 01:06
נושא ההודעה:
ד"א, גם פרמטרי wildcard מורחבים לפני שהם מועברים לפקודה, בניגוד לווינדוס.

בווינדוס אם תריצו app.exe * הפרמטר שיהיה ב argv[1] הוא "*"
בבאש כשמריצים ./app * ה * מתרחבת לכל הקבצים והתיקיות במיקום הנוכחי (חוץ מקבצים\תיקיות שמתחילים ב .)
snir - 23/04/2008 - 10:35
נושא ההודעה:
אולי תכתבו מדריך לBASH מההתחלה ולא תדברו באויר ... Smile
Anonymous - 23/04/2008 - 12:09
נושא ההודעה:
man bash
snir - 23/04/2008 - 21:54
נושא ההודעה:
א.זה לא נגמר(ארוך...)
ב.זה באנגלית והטיפים שלכם בשפת האם שלי(יש לי אנגלית טובה מאוד אבל סבלנות לא כ"כ טובה
ג.בטוח שיותר מחצי לא ממש שימושי
כל הזמנים הם GMT + 2 שעות