فصل 8. عملکردها و مباحث مربوط

‎8.2‎- ثابت‌های عددی

یک اسکریپت پوسته هر عددی را به صورت دسیمال (مبنای ۱۰) تفسیر می‌کند، مگر اینکه عدد دارای پیشوند یا نشانه ویژه‌ای باشد. عددی که یک 0 بر آن مقدم گردیده، اکتال (مبنای ۸) است. عددی که ‎0x‎ پیشوند آن باشد، هگزا دسیمال (مبنای ۱۶) است. یک عدد با کاراکتر # جای گرفته در میان ارقام آن، به منزله ‎BASE#NUMBER‎ (با محدودیت‌های دامنه و نشانه‌گذاری) ارزیابی می‌شود.

مثال ‎8-4‎. معرفی کردن ثابت‌های عددی

#!/bin/bash
#    ‎numbers.sh:‎ نمایش اعداد در مبناهای مختلف‎

#                               پیش‌فرض :‎دسیمال‎
let "dec = 32"
echo "decimal number = $dec"             # 32
#          .اینجا هیچ مورد غیرعادی وجود ندارد‎

# --------- ------ -- -------

# .‏(صفر)قرار دارد ‎'0'‎ اعدادی که جلوی آنها یک ‎:اکتال‎
let "oct = 032"
echo "octal number = $oct"               # 26
# .نتیجه را به دسیمال بیان می‌کند‎

# --------- ------ -- -------


# .جلوی آنها قرار دارد ‎'0X'‎ یا ‎'0x'‎ اعدادی که یک‎ :‎هگزادسیمال ‎
let "hex = 0x32"
echo "hexadecimal number = $hex"         # 50

echo $((0x9abc))                         # 39612
#     ^^      ^^   پرانتزهای دوگانه بسط و ارزیابی‎
#            حسابی، نتیجه را به دسیمال بیان می‌کند‎

# --------- ------ -- -------

# ‎BASE#NUMBER :‎سایر مبناها‎  
# ‎64‎ و ‎2‎ بین ‎BASE‎ 
# .استفاده کند، موارد زیر را ببینید ‎BASE‎ باید از نمادهای داخل دامنه NUMBER‎ ‎


let "bin = 2#111100111001101"
echo "binary number = $bin"              # 31181

let "b32 = 32#77"
echo "base-32 number = $b32"             # 231

let "b64 = 64#@_"
echo "base-64 number = $b64"             # 4031
# .این نشانه‌گذاری فقط برای یک دامنه محدود ۲ تا ۶۴ کاراکتر اسکی کار می‌کند‎
#     _‎ و ‎‎@‎ ‏۱۰ رقم و ۲۶ کاراکتر حروف کوچک و ۲۶ حرف بزرگ بعلاوه کاراکترهای


echo

echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
                                         # 1295 170 44822 3375


#                       :نکته مهم‎
#                     --------------
# استفاده از یک رقم خارج از دامنه نشانه‌گذاریِ 
#       .مبنای تعیین شده، یک پیغام خطا می‌دهد‎

let "bad_oct = 081"
#  خروجی پیعام خطا (نیمه کامل)‏
#  bad_oct = 081: value too great for base (error token is "081")
#         .استفاده می‌کنند ‎0 - 7‎ اعداد اُکتال فقط از ارقام در دامنه

exit $?   # وضعیت خروج ‎= 1‎ (خطا)

# .به خاطر روشن کردن این مطلب ‎Stephane Chazelas‎ و ‎Rich Bartell‎ با تشکر از