راهنمای آموزشی اسکریپت نویسی - مقدماتی

لطفا برای بهتر دیدن صفحه از firefox استفاده کنید
Bash Guide for Beginners Machtelt Garrels

راهنمای Bash برای نوآموزان

متغیرهای آرایه‌ای »
« خلاصه

عملیات با متغیرها

محاسبات با متغیرها

قبلاً در بخشی به نام«عبارت حسابی» در این مورد صحبت نمودیم.

طول یک متغیر

استفاده ترکیب دستوری‎ ${#VAR} ‎ تعداد کاراکترها در یک متغیر را محاسبه خواهد نمود. اگر VAR برابر “*” یا “@” باشد، این کمیت به طور معمول با تعداد پارامترهای موضعی یا تعداد اعضاء یک آرایه جایگزین می‌شود. این مطلب در مثال زیر نمایش داده شده:

[bob in ~] echo $SHELL
/bin/bash

[bob in ~] echo ${#SHELL}
9

[bob in ~] ARRAY=(seven two five)

[bob in ~] echo ${#ARRAY[*]}
3

تبدیلات متغیرها

جایگزینی

${VAR:-WORD}

اگر VAR تعیین نشده یا تهی باشد، بسط WORD جایگزین می‌گردد، در غیر آن‌صورت مقدار VAR جایگزین می‌شود:

[bob in ~] echo ${TEST:-test}
test

[bob in ~] echo $TEST
 

[bob in ~] export TEST=a_string

[bob in ~] echo ${TEST:-test}
a_string

[bob in ~] echo ${TEST2:-$TEST}
a_string

این ترکیب اغلب در بررسی‌های شرطی به کار می‌رود، به عنوان نمونه در این یکی:

[ -z "${COLUMNS:-}" ] && COLUMNS=80

ترکیب کوتاه‌تری برای مورد زیر است:

if [ -z "${COLUMNS:-}" ]; then
	COLUMNS=80
fi

برای اطلاعات بیشتر در مورد این نوع بررسی شرط بخشی تحت عنوان«مقایسه‌ رشته‌ها» را ملاحظه کنید.

اگر خط‌تیره (-)با علامت مساوی (=)تعویض شود، کمیت به پارامتر تخصیص می‌یابد:

[bob in ~] echo $TEST2


[bob in ~] echo ${TEST2:=$TEST}
a_string

[bob in ~] echo $TEST2
a_string

ترکیب دستوری زیر وجود یک متغیر را بررسی می‌کند. اگر ایجاد نشده باشد، بسط WORD در خروجی استاندارد چاپ می‌شود و شل‌های غیرمحاوره‌ای خارج می‌شوند. یک نمونه مشروح:

[bob in ~] cat vartest.sh
#!/bin/bash
 
# This script tests whether a variable is set.  If not,
# it exits printing a message.
 
echo ${TESTVAR:?"There's so much I still wanted to do..."}
echo "TESTVAR is set, we can proceed."

[bob in testdir] ./vartest.sh
./vartest.sh: line 6: TESTVAR: There's so much I still wanted to do...

[bob in testdir] export TESTVAR=present

[bob in testdir] ./vartest.sh
present
TESTVAR is set, we can proceed.

استفاده از «+» به جای علامت تعجب متغیر را برابر با بسط WORD قرار می‌دهد، اگر وجود نداشته باشد هیچ اتفاقی رخ نمی‌دهد.

حذف زیررشته‌ها

برای رها کردن کاراکترهایی به تعداد OFFSET، از یک متغیر، ترکیب زیر را به‌کار ببرید:

${VAR:OFFSET:LENGTH}

پارامتر LENGTH تعیین می‌کند که چند کاراکتر نگه داشته شود، شروع از اولین کاراکتر پس از نقطه offset می‌باشد. اگر LENGTH حذف شود، باقیمانده محتوای متغیرگرفته می‌شود:

[bob in ~] export STRING="thisisaverylongname"

[bob in ~] echo ${STRING:4}
isaverylongname

[bob in ~] echo ${STRING:6:5}
avery

‎${VAR#WORD}‎ و ‎${VAR##WORD}‎

این ساختارها برای حذف یک الگوی منطبق بر بسط WORD در VAR به کار می‌روند. WORD برای تولید یک الگو فقط به عنوان بسط نام فایل، بسط داده می‌شود. اگر الگو بر ابتدای مقداربسط یافته VAR منطبق شود، آنوقت نتیجه بسط، مقدار بسط یافته VAR با کوتاه‌ترین الگوی انطباق است(«#») یا بلندترین الگوی انطباق (نشان داده شده با «##»).

اگر VAR کاراکتر * یا @ باشد، عملیات حذف الگوروی هر پارامتر موضعی به ترتیب اعمال می‌شود، و بسط لیست منتجه خواهد بود.

اگر VAR یک متغیر آرایه‌ای با شاخص «*» یا «@» باشد، عملیات حذف الگو بر هر یک از اعضای آرایه به ترتیب اعمال می‌گردد، و بسط لیست منتجه خواهد بود. این مطلب در مثال زیر نمایش داده شده است:

[bob in ~] echo ${ARRAY[*]}
one two one three one four

[bob in ~] echo ${ARRAY[*]#one}
two three four

[bob in ~] echo ${ARRAY[*]#t}
one wo one hree one four

[bob in ~] echo ${ARRAY[*]#t*}
one wo one hree one four

[bob in ~] echo ${ARRAY[*]##t*}
one one one four

نتیجه متضادی با استفاده از «%» و «%%» حاصل می‌شود، چنانکه در مثال زیر. WORD با یک بخش دنباله رشته منطبق می‌شود:

[bob in ~] echo $STRING
thisisaverylongname

[bob in ~] echo ${STRING%name}
thisisaverylong

جایگزینی قسمت‌های نام متغیرها

این کار بااستفاده از ترکیب‌های

${VAR/PATTERN/STRING}

یا

${VAR//PATTERN/STRING}

انجام می‌شود. ترکیب اول فقط اولین انطباق و دومی تمام انطباق‌های PATTERN را با STRING تعویض می‌نماید:

[bob in ~] echo ${STRING/name/string}
thisisaverylongstring

اطلاعات بیشتری می‌توانید در صفحه‌های infoی Bashبیابید.

متغیرهای آرایه‌ای »
« خلاصه
ترجمه محمود پهلوانی