当列表名称未修复时,bash获取列表长度

时间:2014-01-13 12:37:51

标签: bash

假设我有两个列表:

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

我想编写一个返回给定列表中项目数的函数:

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

我尝试使用${#<varname>[@]}语法,${#!<varname>[@]},但未成功。

由于

3 个答案:

答案 0 :(得分:9)

您可以使用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 <<< "$@")
}

然后你可以这样称呼它:

list_length "a b c"

答案 1 :(得分:8)

将它们放入BASH数组并查看数组长度。

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

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

答案 2 :(得分:3)

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

 foo() { echo $#; }