概述

在 shell 脚本中,有时候需要去求字符串的长度。如下展示了常见求字符串长度的方法。


方法

变量 str 是一个字符串,由于字符串中可能有空格存在,所以引用字符串的值时使用 ${str} 格式而非 $str(如果要使用则需要加上引号 "$str")。

方法一

# 语法
${#str}]
# 示例
str="hello world"
echo ${#str}

方法二

利用 awk 命令的 length 方法。命令格式如下:

# 语法
echo ${str} | awk '{print length($0)}'
# 示例
str="hello world"
echo ${str} | awk '{print length($0)}'

方法三

利用 awk 命令的 NF 内置变量和 -F 选项设置字符串的分隔符,即字符串的长度。

# 语法
echo ${str} | awk -F "" '{print NF}'
# 示例
str="hello world"
echo ${str} | awk -F "" '{print NF}'

方法四

利用 wc 命令的 -L 选项,-L 选项表示获取最长行的长度。对于单个字符串来说,该选项能获取字符串的长度。命令格式如下:

# 语法
echo ${str} | wc -L
# 示例
str="hello world"
echo ${str} | wc -L

方法五

利用 wc 命令的 -c 选项,-c 选项用于统计字符的个数。但是在使用 echo 命令将字符串通过管道符输送给 wc 命令时需要加上 -n 选项,表示去掉字符串的 "\n" 换行符,如果不去掉的话,字符个数就会多一个。命令格式如下:

# 语法
echo -n ${str} | wc -c
# 示例
str="hello world"
echo -n ${str} | wc -c

方法六

利用 expr 命令的 length 方法。命令格式如下:

# 语法
expr length "$str"
# 示例
str="hello world"
expr length "$str"

注意:如果使用 expr 命令求字符串长度的方法,传入的字符串中如果有空格,那么使用 ${str} 引用会失败报错,所以需要使用 "$str" 的方式进行引用。

方法七

利用 expr 命令的 STRING : REGEXP 匹配字符串,其中 STRING 是待匹配的字符串;REGEXP 是正则表达式,这里用 ".*" 表示匹配任意多个字符。命令格式如下:

# 语法
expr "$str" : ".*"
# 示例
str="hello world"
expr "$str" : ".*"

示例

对于上面的几种方法,如下 shell 脚本可做验证:test.sh

#!/bin/bash

# 参数校验
if [ ! $# -eq 1 ]; then
		echo "请输入一个参数"
		exit
fi

# 读入一个参数作为待求长度的字符串
str="$1"

## 方法一
len=${#str}
echo "方法一:$len"

## 方法二
len=$(echo ${str} | awk '{print length($0)}')
echo "方法二:$len"

## 方法三
len=$(echo ${str} | awk -F "" '{print NF}')
echo "方法三:$len"

## 方法四
len=$(echo ${str} | wc -L)
echo "方法四:$len"

## 方法五
len=$(echo -n ${str} | wc -c)
echo "方法五:$len"

## 方法六
len=$(expr length "$str")
echo "方法六:$len"

## 方法七
len=$(expr "$str" : ".*")
echo "方法七:$len"

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐