bash问题:是否有函数可以返回字符串的长度?

超级欧派课程 2024-03-10 02:21:34

最快的方法,不需要外部程序(但在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脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。

0 阅读:0

超级欧派课程

简介:感谢大家的关注