ארגומנטים עם רווחים ו csh

פוסט זה כולל טיפ קצר על כלי עבודה בסביבת 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