آیا تابعی وجود دارد که طول یک رشته را بازگرداند؟
سریعترین روش، نیازی به برنامههای خارجی ندارد(اما در پوسته بورن قابل استفاده نمیباشد)
# 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 آرایه را برمیگرداند.
پرسش و پاسخ7 (آخرین ویرایش 2011-05-26 13:28:27 توسط sbl-eh4-rp1)