فصل 4. معرفی متغیرها و پارامترها

4.3- متغیرهای Bash بدون نوع هستند

بر خلاف بسیاری از زبانهای برنامه‌نویسی دیگر، Bashبرای متغیرهایش بواسطه «نوع»تبعیض قائل نمی‌شود. در اصل متغیرهای Bash رشته‌های کاراکتر هستند، اما، بر اساس زمینه عمل، Bash عملیات حسابی و مقایسه بر روی متغیرها را مجاز می‌کند. عامل تعیین کننده آن است که آیا محتوای یک متغیر فقط شامل ارقام است.

مثال ‎4-4‎. عدد صحیح یا رشته؟

#!/bin/bash
# int-or-string.sh

a=2334                   #       عدد صحیح‎
let "a += 1"
echo "a = $a "           #       a = 2335
echo                     # بازهم عدد صحیح‎


b=${a/23/BB}             #                      ‎"23"‎ به جای ‎"BB"‎ جایگزینی‎
                         #    .را به رشته تبدیل می‌کند ‎$b‎ این تخصیص محتوای‎
echo "b = $b"            #                                       b = BB35
declare -i b             #      .تعریف آن به عنوان عدد صحیح فایده‌ای ندارد
echo "b = $b"            #                                       b = BB35

let "b += 1"             #                                       BB35 + 1
echo "b = $b"            #                                          b = 1
echo                     # تنظیم می‌کند ‎0‎  ‏«مقدار صحیح» یک رشته را به ‎Bash‎

c=BB34
echo "c = $c"            #                                c = BB34
d=${c/BB/23}             #      جایگزین می‌کند ‎"BB"‎ را به جای ‎"23"‎ 
                         #    را به یک عدد صحیح تبدیل می‌کند ‎$d‎ این‎
echo "d = $d"            #                                d = 2334
let "d += 1"             #                                2334 + 1
echo "d = $d"            #                                d = 2335
echo


#                                       در خصوص متغیرهای تهی چطور؟

e=''                     #                           ‎e=""‎ یا ‎e=‎ یا‎
echo "e = $e"            #                                     e =
let "e += 1"             # عملیات حسابی روی یک متغیر تهی میسر است؟‎
echo "e = $e"            #                                   e = 1
echo                     # .متغیر تهی به یک عدد صحیح تبدیل شده است‎

#                                در مورد متغیرهای تعریف نشده چطور؟‎

echo "f = $f"            #                                     f =
let "f += 1"             #                  عملیات حسابی میسر است؟
echo "f = $f"            #                                   f = 1
echo            #.متغیر تعریف نشده یه یک عدد صحیح تبدیل گردیده است‎
#
#                                                           اما ...
let "f /= $undecl_var"   #                      تقسیم بر صفر چطور؟‎
#   let: f /= : syntax error: operand expected (error token is " ")
#       در اینجا به صفر تنظیم نگردیده ‎$undecl_var‎ خطای نحوی! متغیر
#
#                                                  ... اما هنوز هم
let "f /= 0"
#   let: f /= 0: division by 0 (error token is "0")
#                                               .رفتار مورد انتظار‎


#                ‏(معمولا) موقع انجام عملیات حسابی «مقدار صحیح»‏ ‎Bash‎‎
#+                                    .متغیر تهی را صفر قرار می‌دهد‎
#                         اما این را در منزل با دوستان امتحان نکنید!‎
#                 .رفتاری غیر مستند و به طور محتمل غیرقابل حمل است‎


# .متغیرها بدون نوع هستند، با تمام نتایج حاصله  ‎Bash‎ نتیجه‌گیری: در‎

exit $?

متغیرهای بدون نوع هم نعمت هستند هم نکبت. آنها انعطاف‌پذیری بیشتر در اسکریپت‌نویسی را میسر نموده و پیشروی سطرهای کد را آسانتر می‌سازند (و طناب کافی برای به دار آویختن خودتان به شما می‌دهند!). با وجود این، آنها خزیدن خطاهای ظریف را اجازه می‌دهند و عادت‌های برنامه‌نویسی نامرتب را تقویت می‌نمایند.

برای کاستن از بار مسئولیت دیده‌بانی کردن پیوسته از نوع متغیرها در یک اسکریپت، Bash تعریف متغیرها را اجازه می‌دهد .