CentOS7系统中执行如下脚本:
[root@m01 scripts]# cat ips.sh
#!/bin/bash
ips=(
'10.0.0.1'
'10.0.0.2'
'10.0.0.3'
'10.0.0.4'
'10.0.0.5'
)
for i in ${#ips[@]}
do
echo ${ips[$i]}
done
echo '------------------------'
for i in ${#ips[@]}
do
echo ${ips[i]}
done
echo '------------------------'
for ((i=0; i<${#ips[@]}; i++))
do
echo ${ips[i]}
done
执行结果如下:
[root@m01 scripts]# sh ips.sh
------------------------
------------------------
10.0.0.1
10.0.0.2
10.0.0.3
10.0.0.4
10.0.0.5
执行结果中前两个for循环没有输出,第三个C语言风格的for循环有结果输出,是什么原因导致的呢?
展开
作者回复: 首先前两种用法是错误的, ${#ips[@]} 取得长度是5, for i in 5 不会让i取得1-5的值
应该是 for i in ${ips[@]}结构
另外${ips[$i]} 里面的$i 不会被执行,要是用 echo ${ips[i]} 形式
那为什么第二个没有输出呢?因为下标是从0开始的,这里第5个元素,i=4 ,如果 i=5 取不到ips数组的元素,所以为空