我正在尝试通过使用整数变量(即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
答案 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
但我认为这可能是你想要实现的任何错误方法。 (无论如何,