فهرست مطالب
چکیده
در این فصل، در باره استفاده پیشرفته از متغیرها و شناسهها صحبت خواهیم نمود. پس از تکمیل، قادر خواهید بود که:
یک آرایه از متغیرها را تعریف و از آن استفاده کنید
ترتیب متغیرهایی که میخواهید استفاده کنید را مشخص نمایید
متغیرها را فقط خواندنی بسازید
از set برای تخصیص کمیت به یک متغیر استفاده کنید
به طوری که قبلاً دیدیم، Bashبسیاری از انواع مختلف متغیرهایا پارامترها را میشناسد.تا به حال، زحمت زیادی برای نوع متغیرهایی که اختصاص دادهایم نداشتیم، چون متغیرهای ما میتوانستند هر مقداری که به آنها نسبت میدادیم را نگهدارند. یک مثال ساده خطفرمان این را نشان میدهد:
[bob in ~]
VARIABLE
=12
[bob in ~]
echo$VARIABLE
12[bob in ~]
VARIABLE
=string
[bob in ~]
echo$VARIABLE
string
وضعیتهایی وجود دارند که شما میخواهید از این رفتار اجتناب گردد، به عنوان نمونه موقعی که میخواهید با شماره تلفنها یا سایر اعداد کار کنید. غیر از اعداد صحیح و متغیرها، همچنین ممکن است بخواهید متغیری تعیین کنید که مقدارش ثابت باشد. این غالباً در ابتدای یک اسکریپت انجام میشود، وقتی که کمیت ثابت تعریف میشود. بعد از آن، فقط ارجاعهای به آن نام متغیر ثابت وجود دارد، برای اینکه وقتی لازم باشد تغببر داده شود، فقط یکبار باید انجام شود. یک متغیر همچنین میتواند یک سری از هرنوع متغیر باشد، که آرایه متغیرها نامیده شده (VAR0
, VAR1
, VAR2
, ... VARN
).
با استفاده از جمله declare ، میتوانیم اختصاص کمیتها به متغیرها را محدود نماییم.
دستور زبان برای declare به صورت زیر است:
declare
OPTION(s)
VARIABLE
=value
گزینههای زیر میتوانند برای تعیین نوع داده ای که متغیر میتواند نگهدارد و تخصیص صفات آن استفاده شود:
جدول 10.1: گزینههای فرمان داخلی declare
گزینه | معنی |
---|---|
-a | متغیر یک آرایه است. |
-f | فقط استفاده نام توابع. |
-i | با متغیر مانند یک عدد صحیح رفتار میشود، وقتی مقداری به متغیر اختصاص یابد، ارزیابی حسابی انجتم میشود(به بخشی تحت عنوان«بسط حسابی») نگاه کنید. |
-p | مقدار و صفات هر متغیر را نمایش میدهد. وقتی -p استفاده شود، گزینههای اضافی چشمپوشی میشوند. |
-r | متغیرها را فقطخواندنی میکند. این متغیرها پس از اختصاص یافتن مقدار نه میتوانند با تخصیصهای ثانوی تغییر داده شوند و نه میتوانند حذف گردند. |
-t | به هر متغیری صفت trace (پیگردی) میدهد. |
-x | هر متغیر را برای صادر شدن به دستورات ثانوی از طریق محیط علامت میزند. |
کاربرد +
به جای -
در عوض صفات را خاموش میکند. declare موقعی که در توابع به کار برود، متغیرهای محلی ایجاد میکند.
مثال زیر نشان میدهد که چگونه اختصاص یک نوع به یک متغیر بر مقدار آن تأثیر میکند.
[bob in ~]
declare-i
VARIABLE
=12
[bob in ~]
VARIABLE
=string
[bob in ~]
echo$VARIABLE
0[bob in ~]
declare-p
VARIABLE
declare -i VARIABLE="0"
توجه کنید که Bash گزینهای برای تعریف مقدار عددی دارد، اما برای تعریف مقدار رشتهای چیزی ندارد. این به این علت است که، اگر خصوصیات تعیین نشده باشد، به طور پیشفرض یک متغیر میتواند هرنوع داده را نگاه دارد:
[bob in ~]
OTHERVAR
=blah
[bob in ~]
declare-p
OTHERVAR
declare -- OTHERVAR="blah"
به محض اینکه اختصاص کمیتها به متغیر را محدود کنید، فقط میتواند آن نوع داده را نگهداری کند. محدودیتهای ممکن، صحیح، ثابت یا آرایه هستند.
صفخههای info از Bash را برای اطلاعات در مورد کد برگشتی ملاحظه کنید.
در Bash، ثابتها با فقطخواندنی کردن متغیر ایجاد میشوند. دستور داخلی readonly هر متغیر تعیین شده را به عنوان غیرقابل تغییر علامت میزند. ترکیب دستور چنین است:
readonly
OPTION
VARIABLE(s)
مقدار این متغیرهابعداً نمیتواند با تخصیص ثانوی تغییر نماید. اگر گزینه -f
داده شده باشد، هر متغیر میتواند به یک تابع رجوع نماید، به فصل 11, توابع نگاه کنید. اگر گزینه -a
تعیین شده باشد، هر متغیر به یک آرایه از متغیرها رجوع میکند. اگر شناسهای به کار نرود و یا گزینه -p
فراهم شده باشد، لیستی از تمام متغیرهای فقطخواندنی نمایش داده میشود. با استفاده از گزینه -p
، خروجی میتواند به عنوان ورودی استفاده مجدد بشود.
کد برگشتی صفر است، مگر آنکه گزینه نامعتبر تعیین شده باشد، یکی از متغیرها یا توابع موجود نباشد، یا گزینه -f
برای یک نام متغیر به جای یک نام تابع به کار رفته باشد.
[bob in ~]
readonlyTUX
=penguinpower
[bob in ~]
TUX
=Mickeysoft
bash: TUX: readonly variable