为了账号安全,请及时绑定邮箱和手机立即绑定

在bash中同时迭代两个数组

在bash中同时迭代两个数组

手掌心 2019-11-30 14:23:56
我有两个数组。array=(  Vietnam  Germany  Argentina)array2=(  Asia  Europe  America)我想同时遍历这两个数组,即在两个数组的第一个元素上调用一个命令,然后在第二个元素上调用相同的命令,依此类推。伪代码:for c in $(array[*]}do  echo -e " $c is in ......"done我怎样才能做到这一点?
查看完整描述

3 回答

?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

从阿尼桑的回答和其中的评论,我们现在知道您想要什么。这是bashier风格的同一件事,使用for循环。请参见参考手册中的 “ 循环构造”部分。我也在使用printf而不是echo。


#!/bin/bash


array=( "Vietnam" "Germany" "Argentina" )

array2=( "Asia" "Europe" "America" )


for ((i=0;i<${#array[@]};++i)); do

    printf "%s is in %s\n" "${array[i]}" "${array2[i]}"

done

另一种可能性是使用关联数组:


#!/bin/bash


declare -A continent


continent[Vietnam]=Asia

continent[Germany]=Europe

continent[Argentina]=America


for c in "${!continent[@]}"; do

    printf "%s is in %s\n" "$c" "${continent[$c]}"

done

根据您想做什么,您不妨考虑第二种可能性。但是请注意,您不会轻易控制字段在第二种可能性中的显示顺序(嗯,这是一个关联数组,所以这并不奇怪)。


查看完整回答
反对 回复 2019-11-30
?
森林海

TA贡献2011条经验 获得超2个赞

如果所有数组的顺序正确,只需传递索引即可。


array=(

  Vietnam

  Germany

  Argentina

)

array2=(

  Asia

  Europe

  America

)


for index in ${!array[*]}; do 

  echo "${array[$index]} is in ${array2[$index]}"

done


Vietnam is in Asia

Germany is in Europe

Argentina is in America


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 859 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信