سریعترین روش، نیازی به برنامههای خارجی ندارد(اما در پوسته بورن قابل استفاده نمیباشد)
# 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)