11. متغیرها - قسمت سوم

همان‌طور که در بخش متغیرها - قسمت اول اشاره کردیم، استفاده از ابروها در اطراف متغیرها مانع گمراهی می‌شود:

foo=sun
echo $fooshine     # $fooshine is undefined
echo ${foo}shine   # displays the word "sunshine"
تمامش این نیست، به هرحال - این ابروها یک مورد استفاده بسیار قوی‌تر دیگر دارند. ما می‌توانیم با انواع متغیرهای تعریف نشده یا تهی سر و کار داشته باشیم( در پوسته تفاوتی میان تعریف نشده و تهی موجود نیست ).

کاربرد مقادیر پیش‌فرض

کد کوچک پایین را ملاحظه کنید، که به کاربر برای دریافت ورودی اعلام آمادگی می‌کند، امامقادیر پیش‌فرض را قبول می‌کند:
#!/bin/sh
echo -en "What is your name [ `whoami` ] "
read myname
if [ -z "$myname" ]; then
  myname=`whoami`
fi
echo "Your name is : $myname"
گزینه‌های ‎ "-en" ‎ دستور echo به او می‌گویند، انقطاع سطر ایجاد نکند. در برخی سیستم‌ها به جای آن از‎ "\c"‎ در انتهای سطر فرمان استفاده می‌شود.
این اسکریپت چنین اجرا می‌شود:
steve$ ./name.sh
What is your name [ steve ]
Your name is : steve

... or, with user input:

steve$ ./name.sh
What is your name [ steve ] foo
Your name is : foo

این با استفاده از یک ویژگی متغیر پوسته می‌تواند بهتر انجام شود. به وسیله استفاده از ابروها و کاربرد ویژه ‎ ":-" ‎، می‌توانید یک مقدار پیش‌فرض مشخص کنید، که درصورت عدم مقداردهی توسط کاربر، از آن استفاده شود:
echo -en "What is your name [ `whoami` ] "
read myname
echo "Your name is : ${myname:-`whoami`}"
این می‌تواند یک حالت خاص در نظر گرفته شود - ما از خروجی دستور whoami که برابر نام کاربری شما (UID) است، استفاده کردیم. مثال متعارف‌تر استفاده از یک متن ثابت می‌باشد، مانند این:
echo "Your name is : ${myname:-John Doe}"
استفاده دیگر backtick ها، `whoami` اجرای یک زیرپوسته است، به طوری که هر دستور cd یا تنظیم هر متغیر دیگر، در پوسته جاری در حال اجرا، اثر نمی‌گدارد.

استفاده و تنظیم مقادیر پیش‌فرض

ترکیب دیگری به صورت ‎ ":=" ‎ وجود دارد که اگر متغیر تعریف نشده باشد، مقدار پیش‌فرض را به آن نسبت می‌دهد:
echo "Your name is : ${myname:=John Doe}"
این تکنیک به آن معنی است که هردستیابی بعدی به متغیر $myname همیشه به یک کمیت منتهی می‌شود، یا مقدار وارده توسط کاربر، یا کلمه "John Doe" .

Steve Parker  نوشته  Bourne و Bash راهنمای آموزشی اسکریپت نویسی
لطفاً برای بهتر دیدن صفحه از فایرفاکس استفاده کنید