منبع اصلی نوشتار زیر در این لینک قرار دارد

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


پرسش و پاسخ‌های رایج Bash  در Greg\'s Wiki

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

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

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

# 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)