2014-01-13 28 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 $#; }