数组

    跟数组打交道时,要注意一个特殊的环境变量。IFS,全称 Input Field Separator,保存了数组中元素的分隔符。它的默认值是一个空格IFS=' '

    在bash中,可以通过简单地给数组变量的某个下标赋值来创建一个数组:

    数组变量也可以通过复合赋值的方式来创建,比如:

    1. fruits=(Apple Pear Plum)

    单个数组元素的扩展跟普通变量的扩展类似:

      上面两行有很重要(也很微妙)的区别,假设某数组元素中包含空格:

      1. fruits[0]=Apple
      2. fruits[1]="Desert fig"
      3. fruits[2]=Plum

      为了将数组中每个元素单独一行输出,我们用内建的printf命令:

      1. # + Apple
      2. # + Desert
      3. # + Plum

      为什么Desertfig各占了一行?尝试用引号包起来:

      现在所有的元素都跑去了一行 —— 这不是我们想要的!为了解决这个痛点,${fruits[@]}闪亮登场:

      1. printf "+ %s\n" "${fruits[@]}"
      2. # + Apple
      3. # + Plum

      除此之外,可以通过 切片 运算符来取出数组中的某一片元素:

      1. echo ${fruits[@]:0:2} # Apple Desert fig

      在上面的例子中,${fruits[@]}扩展为整个数组,:0:2取出了数组中从0开始,长度为2的元素。

      向数组中添加元素也非常简单。复合赋值在这里显得格外有用。我们可以这样做:

      上面的例子中,${fruits[@]}扩展为整个数组,并被置换到复合赋值语句中,接着,对数组fruits的赋值覆盖了它原来的值。