如何查找BASH Shell数组长度(元素数)

时间:2020-01-09 14:16:32  来源:igfitidea点击:

如何在bash shell脚本中定义数组?
在运行用于shell循环的脚本时,如何找出bash数组的长度(元素数)?

Bash提供一维数组变量。
任何变量都可以用作数组。
内置的声明将显式声明一个数组。
没有数组大小的最大限制,也没有要求对成员进行连续索引或连续分配的要求。
该页面显示了如何在bash数组中查找元素数量。

如何定义bash数组?

可以使用以下语法定义数组:

ArrayName=("element 1" "element 2" "element 3")

用3个元素定义一个名为distro的数组,执行:

distro=("redhat" "debian" "gentoo")

如何引用bash数组中的任何元素?

可以使用以下语法引用数组的任何元素:

${ArrayName[subscript]}

要打印redhat,即第一个元素,请执行:

echo "${distro[0]}"
echo "${distro[2]}"  # will print gentoo

我如何找出bash shell数组的长度?

您可以使用以下语法轻松找出bash shell数组的长度:

${#ArrayName[@]}

要打印发行版数组的长度,请执行:

echo "${#distro[@]}"

输出示例:

3

如果下标是@或*,则单词会扩展到name的所有成员。
通过在变量前面加上前缀,您会发现数组的长度(即元素数)。
现在我们可以使用bash for循环从$distro读取或打印值:

## define it
distro=("redhat" "debian" "gentoo")
 
## get length of $distro array
len=${#distro[@]}
 
## Use bash for loop 
for (( i=0; i<$len; i++ )); do echo "${distro[$i]}" ; done

整合在一起

一个示例shell脚本,用于打印名为NAMESERVERS的数组:

#!/bin/bash
# define array
# name server names FQDN 
NAMESERVERS=("ns1.theitroad.net." "ns2.theitroad.net." "ns3.theitroad.net.")
 
# get length of an array
tLen=${#NAMESERVERS[@]}
 
# use for loop read all nameservers
for (( i=0; i<${tLen}; i++ ));
do
  echo ${NAMESERVERS[$i]}
done

输出示例:

ns1.theitroad.net.
ns2.theitroad.net.
ns3.theitroad.net.