计算 bash 变量中的位数

Count the number of digits in a bash variable

我有一个号码num=010。我想计算这个数字中包含的位数。如果位数超过一定数量,我想做一些处理。

在上面的例子中,位数是3。

谢谢!

在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

假设变量x是问题中的"certain number"

chars=`echo -n $num | wc -c`
if [ $chars -gt $x ]; then
   ....
fi

假设变量只包含数字,那么 shell 已经用长度 Shell Parameter Expansion.

做了你想要的
$ var=012
$ echo "${#var}"
3

这适用于混合了数字和非数字的任意字符串:

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

演示:

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

使用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