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

时间:2009-12-11 07:14:39

标签: arrays bash shell

如何在unix shell中找到数组长度?

7 个答案:

答案 0 :(得分:60)

$$ a=(1 2 3 4)
$$ echo ${#a[@]}
4

答案 1 :(得分:15)

假设bash:

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

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

答案 2 :(得分:11)

来自Bash manual

  

$ {#}参数

     

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

字符串,数组和关联数组的长度

string="0123456789"                   # create a string of 10 characters
array=(0 1 2 3 4 5 6 7 8 9)           # create an indexed array of 10 elements
declare -A hash
hash=([one]=1 [two]=2 [three]=3)      # create an associative array of 3 elements
echo "string length is: ${#string}"   # length of string
echo "array length is: ${#array[@]}"  # length of array using @ as the index
echo "array length is: ${#array[*]}"  # length of array using * as the index
echo "hash length is: ${#hash[@]}"    # length of array using @ as the index
echo "hash length is: ${#hash[*]}"    # length of array using * as the index

输出:

string length is: 10
array length is: 10
array length is: 10
hash length is: 3
hash length is: 3

处理$@,参数数组:

set arg1 arg2 "arg 3"
args_copy=("$@")
echo "number of args is: $#"
echo "number of args is: ${#@}"
echo "args_copy length is: ${#args_copy[@]}"

输出:

number of args is: 3
number of args is: 3
args_copy length is: 3

答案 3 :(得分:6)

在tcsh或csh中

~> set a = ( 1 2 3 4 5 )
~> echo $#a
5

答案 4 :(得分:3)

Fish Shell中,可以找到数组的长度:

$ set a 1 2 3 4
$ count $a
4

答案 5 :(得分:1)

这对我很有用

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

答案 6 :(得分:-3)

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

foo=$(echo ${'ARRAY[*]}