shell中如何查找字符串的长度

shell中如何查找字符串的长度

我需要仅使用纯 sh shell 来计算字符串的长度。实际发生的情况是,这/bin/sh实际上是到 bash 或另一个 shell 的软链接。因此${#STRING}给出了字符串的长度,因为它是高级 bash 功能。

有人能告诉我如何找到字符串的长度吗?我使用的是 Solaris 5.10 Sparc 架构

答案1

wc -m计算字符串中的字符数。因此,您可以执行以下操作:

STRLENGTH=$(echo -n $STRING | wc -m)

替代语法:

STRLENGTH=`echo -n $STRING | wc -m`

echo 的标志-n阻止它打印换行符。该标志在 Solaris 5 上可能有所不同。检查man echo

答案2

这里有几种方法可以实现这一点。

myvar="This is a test"
echo "${#myvar}"
14

或者

expr length "${myvar}"
14

答案3

使用${#string}获取的长度$stringPOSIX shell 参数扩展. 它不是一个bash唯一的功能。

在 Solaris 5.10 上,如果/bin/sh/usr/bin/sh(如sh(1)手册)不支持此功能,那么/usr/xpg4/bin/sh将会。

要在 Solaris 5.10 系统上获得 POSIX 行为,您PATH应该设置为

/usr/xpg6/bin:/usr/xpg4/bin:/usr/ccs/bin:/usr/bin

(按此顺序),如standards(5)手动的

答案4

我认为“纯 sh”无法做到这一点。但您不需要在“纯 sh”中执行任何操作;您需要在 sh 加上标准实用程序中执行此操作。最直接的方法是:

strlength=`expr "$string" : ".*"`

表达式是 POSIX)。或者如果你没有expr(Solaris 5.1 已经过时了),你也可以使用厕所和...一起printf喜欢:

strlength=`printf "%s" "$string" | wc -m`

不要尝试使用echo,因为 echo 会添加尾随换行符,并且没有标准的方法来抑制它。

请注意,如果当前语言环境存在差异,则wc -m计算字符数和字节数。wc -c

相关内容