~5 min read • Updated Jul 18, 2025

۱. توسعه در Bash چیست؟


Bash قبل از اجرای دستور، عناصر خاصی مثل *، $VAR و $(command) را تجزیه و جای‌گذاری می‌کند. این فرآیند به نام توسعه (Expansion) شناخته می‌شود و قدرت Bash را در ساخت دستورات پویا افزایش می‌دهد.


مثال با دستور echo:



echo this is a test     # خروجی: this is a test
echo *                  # لیست تمام فایل‌های دایرکتوری فعلی

۲. توسعه مسیر (Pathname Expansion)


الگوهای استفاده‌شده در توسعه مسیر:



echo D*                # فایل‌هایی که با 'D' شروع می‌شوند
echo *s                # فایل‌هایی که با 's' تمام می‌شوند
echo [[:upper:]]*      # فایل‌هایی با حرف اول بزرگ
echo /usr/*/share      # دایرکتوری‌هایی در /usr که شامل 'share' هستند

توسعه فایل‌های مخفی:



echo .*           # نمایش . و .. و سایر فایل‌های مخفی
echo .[!.]*       # حذف . و .. و هدف‌گیری دقیق‌تر فایل‌های مخفی
ls -A             # لیست فایل‌ها، شامل فایل‌های مخفی واقعی

۳. توسعه tilde (~)



echo ~            # /home/me
echo ~foo         # /home/foo

برای اشاره سریع به مسیر خانگی کاربر استفاده می‌شود.


۴. توسعه ریاضی ($((...)))


عملگرکاربرد
+جمع
-تفاضل
*ضرب
/تقسیم صحیح
%باقیمانده
**توان

نمونه‌کد:



echo $((2 + 2))                      # 4
echo $(((5**2) * 3))                # 75
echo $((5 / 2))                     # 2
echo $((5 % 2))                     # 1

۵. توسعه brace ({...})



echo Front-{A,B,C}-Back             # Front-A-Back Front-B-Back ...
echo {1..5}                         # 1 2 3 4 5
echo {01..15}                       # 01 02 03 ... 15
echo {Z..A}                         # Z Y ... A
echo a{A{1,2},B{3,4}}b              # aA1b aA2b aB3b aB4b
mkdir Photos; cd Photos; mkdir {2007..2009}-{01..12}

مناسب برای ساخت نام فایل‌ها یا دایرکتوری‌ها به‌صورت دسته‌ای


۶. توسعه پارامتر ($VARIABLE)



echo $USER           # نمایش نام کاربر
echo $SUER           # متغیر تعریف‌نشده → رشته خالی
printenv | less      # لیست متغیرهای محیطی

۷. جای‌گذاری دستور ($(command) یا `command`)



echo $(ls)                             # لیست فایل‌ها
ls -l $(which cp)                     # نمایش جزئیات cp
file $(ls -d /usr/bin/* | grep zip)   # بررسی فایل‌های zip
ls -l `which cp`                      # سینتکس قدیمی جای‌گذاری

۸. مکانیزم‌های نقل‌قول


نوع نقل‌قولرفتار
بدون نقل‌قولتمام توسعه‌ها فعال، تقسیم کلمات انجام می‌شود
" "توسعه مسیر و brace غیرفعال، ولی توسعه متغیر و دستور فعال
' 'همهٔ توسعه‌ها غیرفعال

نمونه‌ها:



echo "$USER $((2+2)) $(cal)"     # حفظ فاصله و سطرها
echo 'text ~/*.txt {a,b} $(...)'  # نمایش دقیق رشته واردشده
ls -l "two words.txt"
mv "two words.txt" two_words.txt

۹. فرار دادن کاراکترها (Escaping)


کاراکترهای خاص با \ غیرفعال می‌شوند:



echo "The balance is: \$5.00"       # نمایش دقیق $
mv bad\&filename good_filename       # فرار دادن &
echo "Backslash: \\"                # نمایش \

کنترل کاراکتر با escape sequences


کدتوضیح
\aآلارم (بوق)
\bبک‌اسپیس
\nخط جدید
\rبازگشت به ابتدای خط
\tکاراکتر tab

نمونه‌ها:



echo -e "Hello\tWorld\nNew line"
sleep 5; echo -e "Time's up\a"
sleep 5; echo "Alert" $'\a'

نتیجه‌گیری


توسعه‌ها، نقل‌قول‌ها، و تکنیک‌های فرار در Bash قدرت و انعطاف زیادی در نوشتن دستورات فراهم می‌کنند. تسلط بر این مفاهیم باعث نوشتن اسکریپت‌هایی تمیز، قابل‌اطمینان و خودکار می‌شود که در محیط‌های یونیکسی ضروری‌اند.


Written & researched by Dr. Shahin Siami