Подсчитайте количество цифр в переменной bash

У меня есть ряд num=010. Я хотел бы подсчитать количество цифр, содержащихся в этом номере. Если количество цифр выше определенного числа, я хотел бы сделать некоторую обработку.

В приведенном выше примере количество цифр равно 3.

спасибо!

5 ответов


предполагая, что переменная содержит только цифры, то консоль уже не то, что вы хотите здесь с длиной Расширение Параметров Оболочки.

$ var=012
$ echo "${#var}"
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 является "определенным числом" в вопросе

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

эта работа для произвольной строки вперемешку с цифрами и без цифр:

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