2010-02-02 53 views

回答

6

这会做你想要什么:

echo "1,2,3" | tr -cd ',' | wc -c 
+0

感谢我想要什么;) – soField 2010-02-02 09:35:18

+0

不知道TR -c使用的,漂亮的 – 2010-02-02 09:59:11

+0

实际上TR -cd正在完成这项工作:) – soField 2010-02-04 08:36:49

1

隔离逗号,计算行:

echo "$VAR"|grep -o ,|wc -l 
1

关闭使用纯的bash我的头顶:

var="1,2,3,4" 
temp=${var//[^,]/} 
echo ${#temp} 
+0

将第二行更改为:'temp = $ {var // [^,] /}',然后删除任何非逗号。 – 2010-02-02 10:04:36

+0

良好的通话,感谢提醒 – SiegeX 2010-02-02 10:09:35

0

没有外部程序的纯粹bash解决方案:

$ X=1,2,3,4 
$ count=$(($(IFS=,; set -- $X; echo $#) - 1)) 
$ echo $count 
3 
$ 

注意:这破坏了您的位置参数。

+0

评价和单引号是不必要的。 – 2010-02-02 10:12:46

+0

@丹尼斯:好的。我摆脱了他们。 – camh 2010-02-02 12:05:08

0

另一个纯击溶液:

var="bbb,1,2,3,4,a,b,qwerty,,," 
saveIFS="$IFS" 
IFS=',' 
var=($var)x 
IFS="$saveIFS" 
echo $((${#var[@]} - 1)) 

将输出 “10” 以显示的字符串。

+0

不适用于'var =“1,2,3”'(似乎只有在尾部有逗号时才起作用)。 – 2010-02-02 10:15:42

+0

@Alok:谢谢你指出。现在已修好。不过,我更喜欢** SiegeX的**版本。 – 2010-02-02 14:54:30

0

非常简单地使用awk

$ echo 1,2,3,4 | awk -F"," '{print NF-1}' 
3 

只有外壳

$ s="1,2,3,4" 
$ IFS="," 
$ set -- $s 
$ echo $(($#-1)) 
3 
0
echo '1,2,3' | grep -o ',' | wc -l