我创建了一个数组表,但想根据第一个值检索第二个值。
对于下表,基本上我想让动物是牛,给我看看“ moo”;如果是恐龙,请告诉我“咆哮” ...
ARRAY=( "cow:moo"
"dinosaur:roar"
"bird:chirp"
"bash:rock" )
答案 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
我会使用联想。