我需要仅使用纯 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}
获取的长度$string
是POSIX 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)
手动的。