آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

پرسش و پاسخ شماره ۷



پرسش و پاسخ شماره ۷

آیا تابعی وجود دارد که طول یک رشته را بازگرداند؟

سریع‌ترین روش، نیازی به برنامه‌های خارجی ندارد(اما در پوسته بورن قابل استفاده نمی‌باشد)

# POSIX  در پوسته
${#varname}

یا برای پوسته Bourne:

# Bourne
expr "$varname" : '.*'

( برنامه expr تعداد کاراکترهای انطباق یافته با الگوی‎ .*‎ را چاپ می‌کند، که همان طول رشته است.)

یا:

# Bourne, with GNU expr(1)
expr length "$varname"

(فقط expr BSD و گنو)

این روش دوم در POSIX تعریف نشده است، بنابراین قابل حمل به همه سکوها نیست. در هرحال، اگر ‎$varname‎ به "length" بسط ‌یابد، روش اول با expr گنو و BSD ناموفق است.

یک روش قابل حمل این است:

expr \( "X$varname" : ".*" \) - 1

ممکن است کسی از awk استفاده کند:

# Bourne
awk -v x="$varname" 'BEGIN {print length(x)}'

باوجود اینکه آن یکی به ازای مقادیری از ‎$varname‎ که شامل کاراکترهای \ باشند ناموفق خواهد شد، بنابراین شاید این را ترجیح بدهید:

# Bourne with POSIX awk
awk  'BEGIN {print length(ARGV[1]);exit}' "$varname"


نیازهای مشابه:

# Korn/Bash
${#arrayname[@]}

تعداد عناصر یک آرایه را باز می‌گرداند.

# Korn/Bash
${#arrayname[i]}

طول عضو i آرایه را برمی‌گرداند.


CategoryShell

پرسش و پاسخ7 (آخرین ویرایش ‎ 2011-05-26 13:28:27‎ توسط sbl-eh4-rp1)

نظرات 0 + ارسال نظر
ایمیل شما بعد از ثبت نمایش داده نخواهد شد