Bash脚本。在一个for循环中迭代几个Arrays

时间:2016-04-06 23:35:23

标签: bash shell

我正在尝试通过使用整数变量(即Array_ $ c)动态增加数组名称中的数字(即Array_1,Array_2,Array _...)来创建一个循环来迭代许多数组变量在for循环中增加(++)?

谢谢!

#!/bin/bash

declare -a Array_1=("Google", "www.google.com")
declare -a Array_2=("Facebook", "www.facebook.com")
daclare -a Array_3=("Gmail", "www.gmail.com")

c=1

for i in "${Array_$c[@]}";

  do

     #Print name of the Website ($Array_1[0])
     #Open link in FF ($Array_1[1]) 
     #Increase the $c, to iterate through the second Array using same loop
     (c=$c+1)

  done

3 个答案:

答案 0 :(得分:2)

根据这种用法,您甚至不需要数组。我会这样写的

$ while read site url; 
  do echo "site:" $site; 
     echo "url:" $url;   # do something with url
  done << EOF
google www.google.com
facebook www.facebook.com
gmail www.gmail.com
EOF



site: google
url: www.google.com
site: facebook
url: www.facebook.com
site: gmail
url: www.gmail.com

答案 1 :(得分:1)

当然,可以使用您建议的结构来实现它:

#!/bin/bash

declare -a Array_1=("Google" "www.google.com")
declare -a Array_2=("Facebook" "www.facebook.com")
declare -a Array_3=("Gmail" "www.gmail.com")

for u in "${!Array_@}"; do
    onev=${u}[0]
    twov=${u}[1]
    echo "$u=${!u}"
    echo "name of the Website (${!onev})"
    echo "Link (${!twov})" 
done

但是没有必要让所有这些变得复杂:

List of variables:    "${!Array_@}"
Access to one index:  "onev=${u}[0]"
Indirection:          "$u=${!u}"

此脚本更简单(并执行相同的工作):

#!/bin/bash
while IFS=$' \t\n' read -r name link; do
    echo "name of the Website ($name)"
    echo "               Link ($link)" 
done <<_list_of_sites_
Google      www.google.com
Facebook    www.facebook.com
Gmail       www.gmail.com
_list_of_sites_

答案 2 :(得分:0)

你几乎就在那里。

从其他变量中创建变量名称的常用方法是使用/foo/汉字 [漢字] 。将会有人将eval描述为&#34; evil&#34;以及需要避免的东西,但有些情况下它可以是安全的,有些情况下它是不可避免的。

以下是基于您的脚本摘录的内容:

eval

但我认为这可能是你想要实现的任何错误方法。 (无论如何,