专业编程基础技术教程

网站首页 > 基础教程 正文

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

ccvgpt 2024-10-12 14:08:22 基础教程 11 ℃


最快的方法,不需要外部程序(但在Bourne shell中无法使用):

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

# POSIX
"${#varname}"

(请注意,在bash 3及以上版本中,这返回的是字符的数量,而不是字节的数量,这在多字节字符环境中有重要差异。其他shell在这方面的行为可能不同)。

或者在Bourne shell中可以使用:

# Bourne
expr "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 awk
awk  'BEGIN {print length(ARGV[1])}' "$varname"

(在这种情况下,长度是根据实现而定的,可能是以字节或字符表示,具体取决于实现(例如,GNU awk是以字符表示,而mawk是以字节表示)。


类似的需求:

# Korn/Bash
"${#arrayname[@]}"

展开为数组中的元素数量。

# Korn/Bash
"${#arrayname[i]}"

展开为数组元素i的长度。

more

如果您觉得文章内容对你有一点帮助可以关注我,我在头条平台会持续分享更多实用的shell技巧和最佳实践,如果想系统的快速学习shell的各种高阶用法和生产环境避坑指南可以看看《shell脚本编程最佳实践》专栏,专栏里有更多的实用小技巧和脚本代码分享。

Tags:

最近发表
标签列表