Bash 数组值,如循环内的变量

0 bash array

我尝试使用数组值(如循环的数组名称)进行双循环

array1="name1 name2"
name1="one two"
name2="red blue"

for name in $array1
do 
  for value in $name
  do
    echo "$name - $value"
  done
done
Run Code Online (Sandbox Code Playgroud)

我需要在第二个循环中使用 'name' 到 '$name' ,但这对我不起作用。
如何在第二个循环中使用 array1 的值,如数组的名称?

Sté*_*las 5

这不是你在bash.

a="foo bar"
Run Code Online (Sandbox Code Playgroud)

定义一个字符串/标量变量。并使用它 as $a(unquoted) 执行 split+glob 运算符,该运算符仅对表示$IFS文件模式分隔列表的字符串有意义。

在 中bash,数组定义为:

a=(foo bar)
Run Code Online (Sandbox Code Playgroud)

所以在这里,你会想要:

array1=(name1 name2)
name1=(one two)
name2=(red blue)


for name in "${array1[@]}"
do
  typeset -n nameref="$name"
  for value in "${nameref[@]}"
  do
    printf '%s\n' "$name - $value"
  done
done
Run Code Online (Sandbox Code Playgroud)

typeset -n是一个相对较新的添加bash并声明了nameref,这是一个包含另一个变量名称的变量,并且在扩展时实际上是指命名变量。