Arrays 如何在shell中查找数组的长度?
如何在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
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中使用。操作系统并不重要。