如何从Bash中的数组表中检索值

时间:2019-04-17 14:50:17

标签: arrays bash

我创建了一个数组表,但想根据第一个值检索第二个值。

对于下表,基本上我想让动物是牛,给我看看“ moo”;如果是恐龙,请告诉我“咆哮” ...

ARRAY=( "cow:moo"
        "dinosaur:roar"
        "bird:chirp"
        "bash:rock" )

2 个答案:

答案 0 :(得分:2)

请改用关联数组。

$ declare -A array
$ array=([cow]=moo [dinosaur]=roar [bird]=chirp [bash]=rock)
$ echo "${array[cow]}"
moo

您可以从原始文件中自动生成以上内容:

old_array=( "cow:moo" "dinosaur:roar" "bird:chirp" "bash:rock" )
declare -A array
for x in "${old_array[@]}"; do
  IFS=: read key value <<< "$x"
  # Or
  # key=${x%%:*}
  # value=${x#*:}
  array[$key]=$value
done

答案 1 :(得分:0)

您可能还希望重构和使用并行数组。

animal=( cow dinosaur bird )
sound=( moo road chirp )
for ndx in "${!animal[@]}"
do echo "${animal[ndx]}: ${sound[ndx]}"
done
cow: moo
dinosaur: road
bird: chirp

或者如chepner所说,请使用关联数组-

declare -A sound=(
   [cow]=moo
   [dinosaur]=roar
   [bird]=chirp
)
for critter in "${!sound[@]}"
do echo "$critter: ${sound[$critter]}"
done  # note that these will be unordered
dinosaur: roar
cow: moo
bird: chirp

我会使用联想。