假设我有两个列表:
lista="a b c d"
listb="e f"
我想编写一个返回给定列表中项目数的函数:
>>foo $lista
4
>>foo $listb
2
我尝试使用${#<varname>[@]}
语法,${#!<varname>[@]}
,但未成功。
由于
答案 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 $#; }