How do I find the length of an array in shell?

For example:

arr=(1 2 3 4 5) 

And I want to get its length, which is 5 in this case.

0

7 Answers

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

From Bash manual:

${#parameter}

The length in characters of the expanded value of parameter is substituted. If parameter is ‘’ or ‘@’, the value substituted is the number of positional parameters. If parameter is an array name subscripted by ‘’ or ‘@’, the value substituted is the number of elements in the array. If parameter is an indexed array name subscripted by a negative number, that number is interpreted as relative to one greater than the maximum index of parameter, so negative indices count back from the end of the array, and an index of -1 references the last element.

Length of strings, arrays, and associative arrays

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 

output:

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

Dealing with $@, the argument array:

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

output:

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

Assuming bash:

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

So, ${#ARRAY[*]} expands to the length of the array ARRAY.

3

in tcsh or csh:

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

In the Fish Shell the length of an array can be found with:

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

this works well for me

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

For those who still searching a way to put the length of an array into a variable:

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