概述
在 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"