پارامترهای خاص و متغیرها
اجازه دهید قبل از اقدام واقعی واژگان به کار رفته را مرتب کنیم. پارامترها و متغیرها را داریم. متغیرها در واقع فقط نوعی از پارامترها میباشند: پارامترهایی که با یک نام مشخص میشوند. آن پارامترهایی که متغیر نیستند، پارامترهای خاص نامیده شدهاند. اطمینان دارم که با چند مثال بهتر متوجه خواهید شد:
$ # Some parameters that aren\'t variables: $ echo "My shell is$0 , and has these options set:$- "My shell is $ # Some parameters that ARE variables: $ echo "I am-bash , and has these options set:himB $ LOGNAME , and I live at$ HOME ."I am lhunath, and I live at /home/lhunath.
لطفاً توجه نمایید: برخلاف PHP و Perl ...پارامترها با علامت $ شروع نمیشوند.علامت
گمان میکنم حالا، مقصود را دریافتهاید. در اینجا خلاصهای از اکثر پارامترهای ویژه:
0: محتوی نام یا مسیر اسکریپت است( این در همه حال صدق نمیکند. )
پارامترهای موضعی(مکانی): 1, 2, 3 ...، اینها محتوی شناسههایی میباشند که ما به اسکریپت یا تابع جاری میدهیم.
*: به همه کلمات تمام پارامترهای موضعی بسط مییابد. اگر نقلقول دوگانه بشود، به یک رشته منفرد شامل تمام پارامترهای موضعی بسط مییابد، که با اولین کاراکتر متغیر
IFS ( که بعد در بارهاش صحبت میکنیم)، از یکدیگر جدا شدهاند.@: به تمام کلمات پارامترهای موضعی بسط مییابد، اگر نقلقول دوگانه بشود، به لیستی از تمام کلمات پارامترهای موضعی به صورت کلمههای منفرد، بسط مییابد.
#: به عدد معادل تمام پارامترهای موضعی(مکانی) ارائه شده فعلی، بسط مییابد.
?: به کد خروج آخرین فرمان تکمیل شده در پیشزمینه، بسط مییابد.
$: به PID ( شماره ID پردازش) پوسته جاری، بسط مییابد.
!: به PID آخرین دستور اجرا شده در پسزمینه، بسط مییابد.
_: به آخرین شناسه آخرین فرمانی که اجرا شده است، بسط داده میشود.
و در اینجا چند مثال از متغیرهایی که پوسته برای شما فراهم میکند:
BASH_VERSION : محتوی رشتهایست که شماره نگارش BASH را شرح میدهد.HOSTNAME : شامل نام میزبان کامپیوتر شما میباشد، به شکل کوتاه یا بلند، بستگی به چگونگی تنظیمات کامپیوتر شمادارد.PPID : محتوی شماره شناسایی پردازش(PID) پردازش والد پوسته جاری است.PWD : محتوی دایرکتوری کاری جاری است.RANDOM : هرگاه این متغیر را بسط بدهید، یک عدد تصادفی(ساختگی) بین 0 تا 32767 تولید میشود.UID :شماره شناسایی(ID) کاربر فعلی . نامعتبر برای مقاصد امنیتی یا تأییدی، افسوس.COLUMNS : تعداد کاراکترهایی که میتواند یک سطر از ترمینال شما را پر کند(عرض ترمینال شما بر حسب کاراکتر).LINES : تعداد سطرهایی که ترمینال جاری شما را پر میکند(ارتفاع ترمینال بر حسب سطر).HOME : دایرکتوری خانگی کاربر فعلی.PATH : یک لیست از مسیرها، که با کاراکتر کولن ازیکدیگر جدا شدهاند، و در صورتیکه یک فرمان، مستعار ، تابع، دستور داخلی، و کلمه کلیدی نباشد، و مسیر آن نیز تعیین نشده باشد، برای یافتن آن دستور جستجو میشوند.PS1 : شامل رشتهایست که اعلان پوسته شما را تشریح میکند.TMPDIR : شامل دایرکتوری مورد استفاده پوسته برای نگهداری فایلهای موقتی آن، میباشد.
(خیلی بیشتر از اینها وجود دارد-- برای لیست جامع، مستندات را ملاحظه نمایید.) البته، شما محدود به این متغیرها نمیباشید. هرطور که مایلید متغیرهای خودتان را تعریف کنید:
$country = Canada $ echo "I am$ LOGNAME and I currently live in$ country ."I am lhunath and I currently live in Canada.
توجه داشته باشید که ما کمیت
$language = PHP -bash: language: command not found $language = PHP $ echo "I\'m far too used to $language."I\'m far too used to PHP.
به خاطر بیاورید که BASH پرل یا PHP نیست. شما باید خیلی مراقب چگونگی کارکرد بسط، جهت پرهیز از دردسر بزرگ، باشید. اگر این طور عمل نکنید، موقعیتهای خیلی خطرناکی در اسکریپتهایتان خلق میکنید، بهخصوص موقعی که این اشتباه با دستور rm همراه باشد:
$ lsno secret secret $file = \'no secret \' $ rm$ file rm: cannot remove `no\': No such file or directory
فرض کنید ما دو فایل
عادت مفید:
همواره باید بسطهای پارامتر را به طور صحیح نقلقولی کنید. این امر از تفسیر فضای سفید یا جانشینهای احتمالی در داخل آنها و دادن موی خاکستری به شما یا پاک کردن غیر منتظره فایلها از کامپیوترتان، پیشگیری میکند. تنها PE(بسط پارامتر) خوب، PE نقلقولی شده است.
در مستندات گنو: Shell Parameters , Shell Variables
در پرسش و پاسخهای رایج:
چگونه میتوانم دو متغیر را به هم الحاق کنم؟ چگونه یک رشته را در یک متغیر اضافه(پیوست) کنم؟
چطور میتوانم پارامترهای موضعی(مکانی) بعد از $9 را دستیابی کنم
متغیر: یک متغیر نوعی از پارامتر است که میتوانید مستقیماً آن را ایجاد و ویرایش کنید. با یک نام مشخص میشود، که باید با یک حرف یاخط زیر(
_ )شروع بشود، باید فقط متشکل از حرف، رقم، و خط زیر باشد. نام متغیرها حساس به نوع حروف میباشد.بسط: بسط موقعی رخ میدهد که یک پارامتربا علامت دلار قبل از نامش همراه باشد. BASH مقدار پارامتر گرفته و قبل از اجرای دستور، بسط پارامتر را با آن جایگزین مینماید. این عمل جایگزینی هم نامیده میشود.