ארגומנטים עם רווחים ו csh
17/03/2016
פוסט זה כולל טיפ קצר על כלי עבודה בסביבת Linux. בשביל ללמוד יותר על עבודה בסביבת Linux ו Unix אני ממליץ לכם לבדוק את קורס Linux שיש לנו כאן באתר. הקורס כולל מעל 50 שיעורי וידאו והמון תרגול מעשי ומתאים גם למתחילים.
מתכנתי bash מכירים את סימן ה $@ שמייצג את רשימת כל הארגומנטים לסקריפט עם מרכאות במקומות המתאימים. הסקריפט הבא ב Bash יוצר תיקיה לכל ארגומנט משורת הפקודה שמועבר לו ומעתיק את עצמו לתוכה:
#!/bin/bash
mkdir "$@"
for arg
do
cp "$0" "$arg"
done
בזכות השמוש במרכאות וב $@ הסקריפט תומך גם בספריות יעד עם רווחים בשמן. ומה קורה כשמתרגמים את אותו הסקריפט ל csh ?
#!/bin/tcsh -f
mkdir $argv
foreach arg ($argv)
cp "$0" "$arg"
end
אנו מאבדים את התמיכה בשמות תיקיות עם רווחים פעמיים: גם mkdir וגם הלולאה יהפכו כל ארגומנט המורכב משתי מילים לשני ארגומנטים נפרדים. תיקון? ברור. הסימן :gq אחרי רשימה גורם ל csh לשמור על המרכאות בתוך הרשימה, בדומה ל $@ של bash:
#!/bin/tcsh -f
mkdir $argv:gq
foreach arg ($argv:gq)
cp "$0" "$arg"
end