• Will
    2020-02-04
    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数组的元素,所以为空

     1
     1
  • Edisen
    2019-10-15
    在Centos7 里边 ‘ls *.mp3' 得到好像不是一个列表,只是一个字符串。不能for 循环哦

    作者回复: for 变量 in $(ls命令)

    ls 命令要执行,运行的结果才能成为列表

    
    
我们在线,来聊聊吧