【问题标题】:How to use two arrays in a shell script for loop? [duplicate]如何在shell脚本中使用两个数组进行循环? [复制]
【发布时间】:2017-12-02 16:10:06
【问题描述】:

我在 bash 脚本中有两个数组,每个数组都有相同数量的元素,我需要在 for 循环中为第一个数组中的每个元素编写第二个数组的每个元素

第一个数组名称:ARR_MPOINT

第二个数组名:ARR_LVNAME

脚本片段:

ARR_MPOINT=(/tmp /var /log);
ARR_LVNAME=(lv_tmp lv_var lv_log)

for MPOINT in "${ARR_MPOINT[@]}"
    do
        echo "/dev/mapper/VolGroup01-${ARR_LVNAME[@]}     $MPOINT         xfs      defaults        1 2" 
    done

I need to print below output

/dev/mapper/VolGroup01-lv_tmp      /tmp        xfs      defaults        1 2
/dev/mapper/VolGroup01-lv_var      /var        xfs      defaults        1 2
/dev/mapper/VolGroup01-lv_log      /log        xfs      defaults        1 2

【问题讨论】:

  • 一个迭代 ARR_LVNAME 的嵌套 for 循环应该可以解决问题。刚刚意识到您想要 3 次迭代而不是 9 次,但要在同一索引处访问两个数组。
  • 使用像for i in {0..$ARRAY_SIZE}这样的for循环。然后像echo "/dev/mapper/VolGroup01-${ARR_LVNAME[i]} ${ARR_MPOINT[i]} ..."
  • 如何编辑 ${ARR_LVNAME[@]} ?

标签: arrays linux bash shell


【解决方案1】:

您可以将/ 替换为lv_,并且只使用第一个数组来获取输出:

for MPOINT in "${ARR_MPOINT[@]}"; do
    echo "/dev/mapper/VolGroup01-${MPOINT//\//lv_} $MPOINT xfs defaults 1 2" 
done

【讨论】:

    【解决方案2】:

    如果数组的长度相同,您可以通过索引访问元素:

    for ((i=0; i<${#ARR_MPOINT[@]}; i++)); do
        echo "/dev/mapper/VolGroup01-${ARR_LVNAME[i]}     ${ARR_MPOINT[i]}         xfs      defaults        1 2" 
    done
    

    【讨论】:

    • 谢谢这会奏效。我会试试这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 2020-11-01
    • 2020-09-06
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多