最快的方法,不需要外部程序(但在Bourne shell中无法使用):
# POSIX"${#varname}"(请注意,在bash 3及以上版本中,这返回的是字符的数量,而不是字节的数量,这在多字节字符环境中有重要差异。其他shell在这方面的行为可能不同)。
或者在Bourne shell中可以使用:
# Bourneexpr "x$varname" : '.*' - 1(expr命令打印与模式.*匹配的字符或字节的数量,这就是字符串的长度(对于GNU expr来说是字节)。x是必需的,以避免$varname的值是expr操作符的问题)。
或者可以使用以下方式:
# Bourne,使用GNU `expr(1)`expr length "x$varname" - 1(仅适用于BSD/GNU expr)。
这第二种方式在POSIX中没有规定,因此在所有平台上都不可移植。
还可以使用awk:
# Bourne,使用POSIX awkawk 'BEGIN {print length(ARGV[1])}' "$varname"(在这种情况下,长度是根据实现而定的,可能是以字节或字符表示,具体取决于实现(例如,GNU awk是以字符表示,而mawk是以字节表示)。
类似的需求:
# Korn/Bash"${#arrayname[@]}"展开为数组中的元素数量。
# Korn/Bash"${#arrayname[i]}"展开为数组元素i的长度。
more如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。