Arrays 如何在shell中查找数组的长度?

Arrays 如何在shell中查找数组的长度?,arrays,bash,shell,Arrays,Bash,Shell,如何在shell中查找数组的长度 例如: arr=(1 2 3 4 5) 我想得到它的长度,在这种情况下是5。假设bash: ~> declare -a foo ~> foo[0]="foo" ~> foo[1]="bar" ~> foo[2]="baz" ~> echo ${#foo[*]} 3 因此,${#ARRAY[*]}扩展到数组的长度ARRAY对于那些仍在寻找将数组长度放入变量的方法的人: $ a=(1 2 3 4) $ echo ${#a[@]} 4

如何在shell中查找数组的长度

例如:

arr=(1 2 3 4 5)
我想得到它的长度,在这种情况下是5。

假设bash:

~> declare -a foo
~> foo[0]="foo"
~> foo[1]="bar"
~> foo[2]="baz"
~> echo ${#foo[*]}
3

因此,
${#ARRAY[*]}
扩展到数组的长度
ARRAY

对于那些仍在寻找将数组长度放入变量的方法的人:

$ a=(1 2 3 4)
$ echo ${#a[@]}
4
foo=$(echo ${'ARRAY[*]}
在tcsh或csh中:

~> set a = ( 1 2 3 4 5 )
~> echo $#a
5
在中,可以通过以下方式找到数组的长度:

$ set a 1 2 3 4
$ count $a
4
这对我很管用

    arglen=$#
    argparam=$*
    if [ $arglen -eq '3' ];
    then
            echo Valid Number of arguments
            echo "Arguments are $*"
    else
            echo only four arguments are allowed
    fi
来自Bash:

${#参数}

替换参数扩展值的字符长度。如果参数为“”或“@”,则替换的值为 位置参数的数量。如果参数是数组名 由“”或“@”下标,替换的值是 数组中的元素。如果参数是索引数组名 由负数下标,该数字被解释为 相对于一个大于参数的最大索引,因此 负索引从数组末尾开始倒数,索引为 -1引用最后一个元素

字符串、数组和关联数组的长度 输出:

string length is: 10
array length is: 10
array length is: 10
hash length is: 3
hash length is: 3
number of args is: 3
number of args is: 3
args_copy length is: 3
处理
$@
,参数数组: 输出:

string length is: 10
array length is: 10
array length is: 10
hash length is: 3
hash length is: 3
number of args is: 3
number of args is: 3
args_copy length is: 3

这个问题很老了,但我想知道如何将数组的长度存储在一个变量中?我尝试了类似foo=${#foo[*]}的方法,但是shell抛出了
命令未找到
错误。什么是
*
?它与
@
有何不同?@jameshfisher在这个用法中它没有区别。以上这些都不适合我!这个很好用!!你能再详细一点吗?
@
在这里做什么?@AhmedAkhtar有一个像样的解释。基本上,
[*]
[@]
都将数组“分解”为标记化字符串,但
[@]
可以保留标记内的空格。然而,当计算元素时,它似乎并不重要<代码>arr=(foo“bar baz”);echo${arr[*]}打印
2
,而不是
3
。这对我来说很有效,但只有在删除Mac上的
[@]
之后<代码>GNU bash,3.2.57(1)版-发布(x86_64-apple-darwin19)如果有人有相同的问题。@praveenpremarane使用
[@]
是bash 4及更高版本的一项功能。Bash可以通过自制软件进行更新:如果没有
[@]
,它会为我返回第一个元素的长度(使用Bash 4.4.20(1)-版本)。我不相信Unix中有
count
命令。您使用的是哪个操作系统?@codefrester这是一个shell命令,显然可以在Fish shell中使用。操作系统并不重要。