نام یک متغیر، جاینگهدارندهای برای مقدار آن، یعنی دادهای که نگهداری میکند، است. رجوع کردن به (بازیابی) مقدار آن، جایگزینی متغیر نامیده میشود.
اجازه بدهید به دقت میان نام متغیر و مقدار آن تمایز قایل شویم. اگر variable1 نام یک متغیر باشد، آنوقت$variable1 یک ارجاع به مقدار آن، یعنی قلم دادهای که محتوای آن است، خواهد بود. [1]
bash$ variable1=23 bash$ echo variable1 variable1 bash$ echo $variable1 23
تنها مواقعی که یک متغیر «عریان» -- بدون پیشوند $ -- ظاهر میگردد، آن هنگامی است که تعریف یا تخصیص داده میشود، وقتی unset میشود، موقعی که صادر میشود، در یک عبارت حسابی درون پرانتزهای دوگانه (( ... ))، یا در مورد خاص نمایندگی متغیر از یک سیگنال است ( مثال 32-5 را ببینید). تخصیص میتواند با یک = (همچون در var1=27 )، در یک جمله read، و در بالای یک حلقه (for var2 in 1 2 3) باشد.
محصور کردن یک مقدار ارجاع شده در نقلقولهای دوگانه (" ... ") از جایگزینی متغیر ممانعت نمیکند. این روش نقلقول کردن جزیی نامیده میشود، گاهی اوقات نیز با عنوان «نقلقول ضعیف» منسوب میشود. به کار بردن نقلقولهای منفرد (' ... ') باعث میگردد نام متغیر به طور لفظی استفاده شود، و جایگزینی واقع نخواهد شد. این کار، نقلقول کردن کامل نامیده میشود، گاهی اوقات به عنوان «نقلقول قوی» ذکر میگردد. برای یک بحث تفصیلی فصل 5 را ببینید.
توجه نمایید که $variable در واقع یک شکل ساده شده برای ${variable} است. در مضمونهایی که در آنها ترکیب $variable باعث یک خطا میگردد، شکل بلندتر ممکن است کار کند ( بخش 10.2 را ببینید).
مثال 4-1. تخصیص و جایگزینی پارامتر
#!/bin/bash # #متغیرها: تخصیص و جایگزینی a=375 hello=$a # # # # # # #% # # #% #+ # echo hello # # echo $hello # # echo ${hello} # # # echo "$hello" # echo "${hello}" # echo hello="A B C D" echo $hello # echo "$hello" # # # # # echo echo '$hello' # # # #+ # hello= # echo "\$hello (null value) = $hello" # # #+ # # #+ # var1=21 var2=22 var3=$V3 echo echo "var1=$var1 var2=$var2 var3=$var3" # # echo; echo numbers="one two three" # other_numbers="1 2 3" # # #+ # echo "numbers = $numbers" echo "other_numbers = $other_numbers" # # mixed_bag=2\ ---\ Whatever # echo "$mixed_bag" # echo; echo echo "uninitialized_variable = $uninitialized_variable" # uninitialized_variable= # #+ echo "uninitialized_variable = $uninitialized_variable" # uninitialized_variable=23 # unset uninitialized_variable # echo "uninitialized_variable = $uninitialized_variable" # # echo exit 0
متغیر ارزشگذاری نشده، دارای یک مقدار "null" است -- به هیچوجه مقداری به آن تخصیص نیافته (نه صفر!) if [ -z "$unassigned" ] then echo "\$unassigned is NULL." fi # به کار بردن متغیر قبل از اینکه به آن مقدار تخصیص داده شود میتواند موجب مشکلاتی گردد.با این حال انجام عملیات حسابی روی متغیرهای مقداردهی نشده امکانپذیر است. echo "$uninitialized" # let "uninitialized += 5" # echo "$uninitialized" # #همچنین مثال 15-23 را ببینید. |
[1] |
از نظر تکنیکی، نامِ یک متغیر یک lvalue خوانده میشود، به معنای آنکه در طرف چپ یک جمله تخصیص ظاهر میشود، همچون در VARIABLE=23. یک مقدار متغیر یک rvalue است، یعنی در طرف راست یک جمله تخصیص ظاهر میگردد، به عنوان مثال در VAR2=$VARIABLE. یک نامِ متغیر، در واقع، یک ارجاع، یک اشارهکننده به مکانی در حافظه است، جایی که دادههای مرتبط با آن متغیر نگهداری میشوند. |