在bash变量中计算数字的个数

12

我有一个数字 num=010。我想要计算这个数字中包含的数字数量。如果数字数量超过特定值,我想要进行一些处理。

在上面的示例中,数字数量为3。

谢谢!


3
${#num} 做你想要的事吗? - Etan Reisner
该变量是否可以包含任何非数字字符? - glenn jackman
@EtanReisner,请将其添加为答案。 - glenn jackman
5个回答

21
假设变量只包含数字,则 shell 在此处使用长度 Shell 参数扩展 已经实现了您所需的功能。
$ var=012
$ echo "${#var}"
3

如果var被分配为命令的结果,则此方法无效;相反,它返回命令的长度。请改用@anubhava的答案。 - Peter Kionga-Kamau

11

在BASH中,您可以这样做:

num='a0b1c0d23'
n="${num//[^[:digit:]]/}"
echo ${#n}
5

使用 awk,您可以做到:

num='012'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
3

num='00012'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
5

num='a0b1c0d'
awk -F '[0-9]' '{print NF-1}' <<< "$num"
3

3
假设变量x是问题中的“特定数字”。
chars=`echo -n $num | wc -c`
if [ $chars -gt $x ]; then
   ....
fi

2

这适用于任意包含数字和非数字字符的字符串:

ndigits=`echo $str | grep -P -o '\d' | wc -l`

演示:

$ echo sf293gs192 | grep -P -o '\d' | wc -l
       6

1
使用 sed:
s="string934 56 96containing digits98w6"
num=$(echo "$s" |sed  's/[^0-9]//g')
echo ${#num}
10

使用grep命令:
s="string934 56 96containing digits98w6"
echo "$s" |grep -o "[0-9]" |grep -c ""
10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接