2014-01-13 27 views
0

假设我有两个列表:庆典获取列表的长度时,列表名称不固定

lista="a b c d" 
listb="e f" 

我想编写一个返回的项目给定的名单上的一个功能:

>>foo $lista 
4 
>>foo $listb 
2 

我试过使用${#<varname>[@]}语法,也是,失败。

谢谢

+0

你的问题解决了吗? – fedorqui

+0

我试着删除这个问题,因为它不准确,但我无法做到,因为它已经有了答案。所以不... –

+0

哦,我明白了。我们回答得太快,因为我们得到了一些upvotes这个问题不能被删除... – fedorqui

回答

5

把它们放到BASH数组中,看看数组的长度。

a=($lista) 
echo ${#a[@]} 
4 

a=($listb) 
echo ${#a[@]} 
2 
+0

@OmerDagan:这个答案是否适合你? – anubhava

3

您可以使用wc -w此:

$ lista="a b c d" 
$ wc -w <<< "$lista" 
4 
$ listb="e f" 
$ wc -w <<< "$listb" 
2 

man wc

-w,--words

打印字计数


为了使其功能,用途:

list_length() { 
     echo $(wc -w <<< "[email protected]") 
} 

然后你可以这样调用它:

list_length "a b c" 
3

如果你确实想编写一个函数,你可以利用正常的优势参数解析和$#包含传递的参数数量的事实:

foo() { echo $#; }