Shell 数组使用( 及 @ 跟 * 的区别)

470 阅读1分钟
  • 数组也是一个变量,有点特殊的变量,存储多个数据的集合就是数组。

  • 不同的 shell 解释器,索引起始位置也不一样,bash 从0 开始,csh,zsh 从 1 开始。

    # 定义数组
    $ arr=(11 22 33)
    
    # bash 解释器取出数组 0 索引的值
    $ echo ${arr[0]}
    11
    
    # csh、zsh 解释器取出数组 1 索引的值
    $ echo ${arr[1]}
    11
    
  • @* 的区别

    • 变量使用 * 时,变量被 "" 包裹,会当成一串字符串处理。

    • 变量使用 @ 时,变量被 "" 包裹,依然当做数组处理。

    • 变量在没有被 "" 包裹的情况下,@* 是等效的.

    arr=(11 22 33)
    
    echo "---- @ 带冒号"
    for line in "${arr[@]}"
    do
      echo $line
    done
    
    echo "---- * 带冒号"
    for line in "${arr[*]}"
    do
      echo $line
    done
    
    echo "---- @ 不带冒号"
    for line in ${arr[@]}
    do
      echo $line
    done
    
    echo "---- * 不带冒号"
    for line in ${arr[*]}
    do
      echo $line
    done
    

    输出结果:

    ---- @ 带冒号
    11
    22
    33
    ---- * 带冒号
    11 22 33
    ---- @ 不带冒号
    11
    22
    33
    ---- * 不带冒号
    11
    22
    33