我知道可以通过做${#arrayname[@]}
来获得bash中数组的长度。
我的问题是:这只是我必须背诵的东西,还是可以将这种语法分解成可理解的部分?例如,@
符号表示人们期望找到索引的位置是什么?为什么#
?
我知道可以通过做${#arrayname[@]}
来获得bash中数组的长度。
我的问题是:这只是我必须背诵的东西,还是可以将这种语法分解成可理解的部分?例如,@
符号表示人们期望找到索引的位置是什么?为什么#
?
#
获得的最后一个元素2
装置的长度,以获得变量值的长度。对于普通变量,这意味着它的长度以字符为单位。 #
是“数字”符号,因此您可以将其记为“变量中的事物数量”。
@
或*
在数组索引中意味着使用整个数组而不是特定元素,而不是返回字符数,而是返回数组元素的数量。在许多情况下,*
被用作通配符,所以这应该很容易记住。另外,$*
和[email protected]
用于表示shell脚本的所有参数,所以与所有数组元素的并行应该是显而易见的。
你不能只写${#arrayname}
,因为当你使用一个没有下标的数组变量时,它相当于数组的0
。所以${#arrayname}
与${#arrayname[0]}
相同,它是数组第一个元素中的字符数。
'@'与'*'的作用方式相同。不是提供一个特定的索引,而是引用完整的东西。
的“#”是告诉bash,那么你想要的长度
https://www.cyberciti.biz/faq/finding-bash-shell-array-length-elements/
明白了 - 谢谢! –
在形式${#PARAMETER}
的一般用法返回字符数和不字节参数的值的长度。
myString="Hello StackOverflow!"
printf "%s\n" "${#myString}"
20
但对于阵列,该膨胀型具有两个含义:
@
和*
它 报告集合中元素的阵列中的数考虑在阵列的例子,
myArray=(1 2 3 4 15)
printf "%s\n" "${myArray[@]}" # <-- Gives me list of elements
1
2
3
4
15
printf "%s\n" "${#myArray[@]}" # <-- Gives me number of elements
5
它得到现在有趣,可以通过以可变参考的开始做
printf "%s\n" "${#myArray[4]}"
2
你应该记住。 :) #
通常意味着号码。例如所述
$#
- 是参数${#str}
数 - 所述阵列的长度(元素的数量)arr
${#arr}
- - 所述第一元件的长度的字符串$str
${#arr[@]}"
的长度(如上面的str
)不幸的是${parameter#word}
或${parameter##word}
与号码没有任何关系。 (它会从parameter
开始的最短/最长word
而且还可以,# ....
是评论;)
这是有帮助的 - 谢谢! –