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

‎8.3‎- ساختار پرانتزهای دوگانه

مشابه فرمان let، ساختار ‎(( ... ))‎ نیز بسط و ارزیابی حسابی را مجاز می‌سازد. در ساده‌ترین شکل آن، ‎a=$(( 5 + 3 ))‎ مقدار a را به ‎5 + 3‎‏، یا 8 تنظیم می‌کند. اگرچه، این ساختار پرانتزهای دوگانه مکانیسمی برای مجاز کردن دستکاری سبکِ C متغیرها در Bash نیز می‌باشد، برای مثال، ‎(( var++ ))‎.

مثال ‎8-5‎. دستکاری سبکِ C متغیرها

#!/bin/bash
#  c-vars.sh
# ‎(( ... ))‎ یک متغیر با کاربرد ساختار ‎C‎ دستکاری سبکِ‎


echo

(( a = 23 ))  #  ‎C-style‎  تنظیم مقدار‏، به صورت 
              #+   ‎"="‎ با فاصله‌ها در هر دو طرف
echo "a (initial value) = $a"   #  23

(( a++ ))     #       ‎C-style‎ با ‎'a'‎ پس افزایش
echo "a (after a++) = $a"       #  24

(( a-- ))     #         ‎C-style‎ با ‎'a'‎ پس کاهش
echo "a (after a--) = $a"       #  23


(( ++a ))     #      ‎C-style‎ با ‎'a'‎ پیش افزایش
echo "a (after ++a) = $a"       #  24

(( --a ))     #        ‎C-style‎ با ‎'a'‎ پیش کاهش
echo "a (after --a) = $a"       #  23

echo

# #######################################################
#  عملگرهای پیش و پس کاهش ‎C‎ توجه نمایید که همانند با‎
#+                   .دارای آثار جانبی متفاوتی هستند‎

n=1; let --n && echo "True" || echo "False"  #  False
n=1; let n-- && echo "True" || echo "False"  #  True

#   Thanks, Jeroen Domburg.
########################################################

echo

(( t = a<45?7:11 ))   #  ‎C-style‎ عملگر سه‌گانه
#       ^  ^ ^
echo "If a < 45, then t = 7, else t = 11."  #  a = 23
echo "t = $t "                              #  t = 7

echo


#                   ------------------------
#                      !افشای ویژگی پنهان
#                   ------------------------
# مستندسازی نشده ‎C-style‎ یک گروه ساختارهای ‎Chet Ramey‎ به نظر می‌رسد
#+  ( ‎ksh‎ پنهان کرده است (در حقیقت تقریباً اقتباس شده از ‎Bash‎ را در‎
#  را حساب پوسته نام می‌دهد، ‎(( ... ))‎ ساختار ‎Bash‎ در مستندات ‎Ramey‎ 
#+                اما فراتر از آن می‌رود. متاسفم Chet، راز برملا شد.‎

# را نیز ببینید ‎(( ... ))‎ با کاربرد ساختار ‎"while"‎ و ‎"for"‎ حلقه‌های‎

#            .یا بعد از آن کار می‌کنند ‎2.04‎ نگارش ‎Bash‎ اینها فقط با‎

exit

همچنین مثال ‎11-13‎ و مثال ‎8-4‎ را ببینید.