بسط ابرو یکی از جایگزینیهایی است که Bash روی فرمانها انجام میدهد. این بسط در ماهیت کاملاً مطابق قواعد دستور زبان است(درکی از مضمون ندارد). در اصل، به عنوان یک میانبر نوشتاری، برای فشرده سازی بیشتر فرمانها به کار میرود:
mv foobar.{o,exe} obj # :معادل است با mv foobar.o foobar.exe obj
یک بسط ابرو به یک کلمه یا بیشتر منجر میگردد. همه کاراکترهای خارج از ابروها در هر کلمه تکرار میشوند. ابروها محتوایی را که در بین کلمات متغیر است، تعیین میکنند.
بسطهای ابرو میتوانند رشتههای جدا شده با کاما را، به طوری که در مثال فوق نشان داده شده به کار ببرند. به طوری که از Bash 3.0، آنها میتوانند برای دامنه حروف یا اعداد نیز استفاده شوند. این مورد به عنوان «بسط توالی» شناخته میشود:
for i in {1..10} {a..f}; do sleep 1 echo $i done
بسط ابرو قبل از بسط پارامتر انجام میشود، این مطلب تقریباً استفاده از بسط ابرو برای ایجاد لیستهایی که اندازه آنها فقط در حین اجرا معلوم میشود، را غیر ممکن میسازد.
# !کار نخواهد کرد for i in {1..$n}; do
در موقعیت تکرار ساده روی اعداد صحیح، یک حلقه محاسباتی for تقریباً همیشه نسبت به بسط ابرو ترجیح خواهد داشت، زیرابسط ابرو هر شناسهای را که میتواند آرامتر باشد نیز از قبل بسط میدهد و حافظه را به طور غیر ضرور مصرف میکند.
for ((i=1; i<=n; i++)); do ... done
در موقعیت تولید لیستهای شناسه نیز یک حلقه میتواند برای ساختن یک آرایه به کار برود.
pushd ~/music while ((i<=n)); do args+=( @(foo|bar)$((i++)).mp3 ) done cmd "${args[@]}" popd
بسط ابرو توسط POSIX تعریف نگردیده است. این بسط ابتدا در csh معرفی شد، اما ksh93، Zsh، Bash، و mksh همه ویژگیهای بسط ابروی مشابه دارند. mksh از بسط توالی پشتیبانی نمیکند، و zsh به طور پیشفرض فقط از بسط توالی روی اعداد صحیح پشتیبانی میکند، لیکن بسیاری موارد الحاقی خود را دارد. در ksh93 بسط ابرو به طور پیشفرض فعال نیست، در Bash هست.
# zsh یا ksh93 در $ n=5; echo {1..$n} 1 2 3 4 5
ترتیب ارزیابی Bash یک موهبت مختلط است. از یک طرف اجازه میدهد نتایج بسط ابرو موضوع تمام جایگزینیهای ذیگر بشود، به طوری که همه بسطهای تولید شده ارزیابی میشوند:
#Bash $ echo $((n++)){1..5} 01 12 23 34 45
# zsh or ksh93 $ echo $((n++)){1..5} 01 02 03 04 05
از طرف دیگر، از این که متایج سایر جایگزینیها در بسطهای ابرو تفسیر گردن پیشگیری میکند، این مطلب احتمالاً بسط ابرو را به طور جزئی برای فعال بودن به طور پیشفرض، ایمنتر میسازد، آنطور که در Bash هست، بسته به آن که شما سعی دارید جه کاری انجام بدهید، هر دو مورد میتوانند خوب یا بد باشند. این یکی از حد وسطهای تأسفآور است.
این گفتار هنوز تازه است. Bash-hackers یک مورد تکامل یافته دارد: http://wiki.bash-hackers.org/syntax/expansion/brace با خیال راحت یکی یا هر دو را بهبود بدهید!
بسط ابرو (آخرین ویرایش 2012-03-30 18:13:14 توسط ormaaj)