在bash中同时迭代两个数组
我有两个数组。
array=( Vietnam Germany Argentina ) array2=( Asia Europe America )
我想同时循环这两个数组,即在两个数组的第一个元素上调用一个命令,然后在第二个元素上调用相同的命令,依此类推。 伪代码:
for c in $(array[*]} do echo -e " $c is in ......" done
我怎样才能做到这一点?
从anishsane的回答和其中的评论,我们现在知道你想要什么。 在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
根据你想要做什么,你不妨考虑第二种可能性。 但是请注意,在第二种可能性中,您不会轻易控制字段显示的顺序(这是一个关联数组,所以这不是一个惊喜)。
如果所有的数组都是正确sorting的,只是绕过索引。
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
您需要在array&array2上进行循环
i=0 while [ $i -lt ${#array[*]} ]; do echo ${array[$i]} is in ${array2[$i]} i=$(( $i + 1)); done Vietnam is in Asia Germany is in Europe Argentina is in America
或者,您可以使用此选项(不带循环):
paste <(tr ' ' '\n' <<< ${array[*]}) <(tr ' ' '\n' <<< ${array2[*]}) | sed 's/\t/ is in /'