如何在shell中找到数组的长度?
例如:
arr=(1 2 3 4 5)
我想得到它的长度,在这种情况下为5。
如何在shell中找到数组的长度?
例如:
arr=(1 2 3 4 5)
我想得到它的长度,在这种情况下为5。
Answers:
$ a=(1 2 3 4)
$ echo ${#a[@]}
4
[@]
在Mac上删除之后才可以。GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
如果有人遇到同样的问题。
[@]
是bash 4及更高版本的功能。Bash可以通过自制软件进行更新:itnext.io/upgrading-bash-on-macos-7138bd1066ba
[@]
它将为我返回第一个元素的长度(使用Bash 4.4.20(1)-release)。
从Bash手册:
$ {#parameter}
参数的扩展值的字符长度被替换。如果parameter为' '或'@',则替换的值为位置参数的数量。如果parameter是下标为' '或'@'的数组名称,则替换的值为数组中元素的数量。如果parameter是带有负数后缀的索引数组名称,则该数字将被解释为相对于大于参数最大索引的整数,因此负索引从数组末尾算起,索引-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
假设bash:
~> declare -a foo
~> foo[0]="foo"
~> foo[1]="bar"
~> foo[2]="baz"
~> echo ${#foo[*]}
3
因此,${#ARRAY[*]}
扩展为array的长度ARRAY
。
command not found
错误。
*
啊 @
有何不同?
在鱼壳中,可以通过以下方式找到数组的长度:
$ set a 1 2 3 4
$ count $a
4
count
Unix中有命令。您正在使用哪个操作系统?
这对我来说很好
arglen=$#
argparam=$*
if [ $arglen -eq '3' ];
then
echo Valid Number of arguments
echo "Arguments are $*"
else
echo only four arguments are allowed
fi
@
在这里做什么?