计算bash变量中的位数

时间:2015-07-09 20:17:42

标签: bash shell digits

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

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

谢谢!

5 个答案:

答案 0 :(得分:11)

假设变量只包含数字,那么shell已经完成了你想要的长度Shell Parameter Expansion

$ var=012
$ echo "${#var}"
3

答案 1 :(得分:5)

在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

答案 2 :(得分:2)

假设变量x是问题中的“特定数字”

public class Child {
  public virtual int Id { get; set; }
  public virtual string Name { get; set; }
  public virtual Parent Parent { get; set; }
}

public class Parent {
  public virtual int Id { get; set; }
  public virtual string Name { get; set; }
  public virtual IEnumerable<Child> Children { get; set; }
}

public ChildMap : ClassMap<Child> {
  public ChildMap() {
    Id(x => x.Id);
    Map(x => x.Name);

    // How should I set this up?
    Reference(x => x.Parent);
  }
}

public ParentMap : ClassMap<Parent> {
  public ParentMap() {
    Id(x => x.Id);
    Map(x => x.Name);

    // How should I set this up ?
    HasMany(x => x.Children);
  }
}

答案 3 :(得分:0)

这项工作用于混合数字和非数字的任意字符串:

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

演示:

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

答案 4 :(得分:0)

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