Bash循环遍历数组

时间:2014-06-04 14:28:57

标签: arrays bash

我正在BASH 3.2中编写一个脚本我有一系列打印机,其中包含我想要循环的属性,但我没有得到任何东西。

以下是我期望它的工作方式:

#!/bin/bash
NMR=("NMR_hp_color_LaserJet_3700" "HP Color LaserJet 3700");
R303=("303_HP_Color_LaserJet_CP5225n" 'HP Color LaserJet CP5520 Series');
Printers=("NMR" "R303")

for i in "${Printers[@]}"
do
    for x in "${i}"
       do
           echo "${x[1]}"
       done
done

我发现它更接近,因为它输出所有值,但我无法定位打印机的特定属性:

#!/bin/bash
NMR=("NMR_hp_color_LaserJet_3700" "HP Color LaserJet 3700");
R303=("303_HP_Color_LaserJet_CP5225n" 'HP Color LaserJet CP5520 Series');
Printers=("NMR" "R303")

for i in "${Printers[@]}"
do
    arrayz="$i[@]"
    for x in "${!arrayz}"
       do
           echo "$x";
       done
done

如何定位特定属性?

1 个答案:

答案 0 :(得分:3)

您可以使用indirect variable expansion

for i in "${Printers[@]}"; do
    j="$i[@]"
    a=("${!j}")
    echo "${a[@]}"
done

NMR_hp_color_LaserJet_3700 HP Color LaserJet 3700
303_HP_Color_LaserJet_CP5225n HP Color LaserJet CP5520 Series

更新:要获取特定索引1的元素,您可以使用:

for i in "${Printers[@]}"; do j="$i[@]"; a=("${!j}"); echo "${a[1]}"; done
HP Color LaserJet 3700
HP Color LaserJet CP5520 Series