Arrays 从bash中的串联变量定义数组

Arrays 从bash中的串联变量定义数组,arrays,bash,variables,concatenation,Arrays,Bash,Variables,Concatenation,在我下面发布的代码之外,我定义了一个数组fanrp0[1]和fanrp0[2],我对fan0到3也做了同样的操作。我正在尝试更改fstat并在两个阵列中响应每个风扇 for (( f=1; f<=2; f++ )) do for (( f2=0; f2<=3; f2++ )) do fstat="${(fanrp$f2)[$f]}" echo $fstat done do

在我下面发布的代码之外,我定义了一个数组fanrp0[1]和fanrp0[2],我对fan0到3也做了同样的操作。我正在尝试更改fstat并在两个阵列中响应每个风扇

    for (( f=1; f<=2; f++ ))
     do
       for (( f2=0; f2<=3; f2++ ))
        do
          fstat="${(fanrp$f2)[$f]}"
          echo $fstat
        done
     done

for((f=1;f如果
fanrp0
fanrp1
fanrp2
fanrp3
都是数组,则可以将循环编写为

for (( f=1; f<=2; f++ ))
do
  for (( f2=0; f2<=3; f2++ ))
  do
    x="fanrp$f2[$f]"
    fstat="${!x}"
    echo $fstat
  done
done

如果
fanrp0
fanrp1
fanrp2
fanrp3
都是数组,则可以将循环编写为

for (( f=1; f<=2; f++ ))
do
  for (( f2=0; f2<=3; f2++ ))
  do
    x="fanrp$f2[$f]"
    fstat="${!x}"
    echo $fstat
  done
done

如果
fanrp0
fanrp1
fanrp2
fanrp3
都是数组,则可以将循环编写为

for (( f=1; f<=2; f++ ))
do
  for (( f2=0; f2<=3; f2++ ))
  do
    x="fanrp$f2[$f]"
    fstat="${!x}"
    echo $fstat
  done
done

如果
fanrp0
fanrp1
fanrp2
fanrp3
都是数组,则可以将循环编写为

for (( f=1; f<=2; f++ ))
do
  for (( f2=0; f2<=3; f2++ ))
  do
    x="fanrp$f2[$f]"
    fstat="${!x}"
    echo $fstat
  done
done

问题是什么?看起来你在尝试做bash所说的间接引用,从我在上找到的数组变量判断,这显然是相当困难和麻烦的。你可以用
eval
更容易地完成你需要的,就像
eval“fstat=\${fanrp$f2[$f]}”
,但请记住,使用
eval
存在一些安全问题。我会先阅读我链接到的Bash FAQ页面。如果您开始考虑
[…]
而不是作为索引语法,而是作为变量名称的一部分,那么间接数组引用就更容易了。如果您有一个数组
foo
,那么
foo[0]
foo[1]
等都是命名奇怪的变量,每个变量都有自己的值。然后
x=foo[0]
自然会导致
${!x}
等同于
${foo[0]}
。问题出在哪里?看起来你正在尝试做bash所说的间接引用,从我在上找到的数组变量判断,这显然是相当困难和麻烦的。你可以用
eval
更容易地完成你需要的,就像
eval“fstat=\${fanrp$f2[$f]}
,但请记住,使用
eval
存在一些安全问题。我会先阅读我链接到的Bash FAQ页面。如果您开始考虑
[…]
而不是作为索引语法,而是作为变量名称的一部分,那么间接数组引用就更容易了。如果您有一个数组
foo
,那么
foo[0]
foo[1]
等都是命名奇怪的变量,每个变量都有自己的值。然后
x=foo[0]
自然会导致
${!x}
等同于
${foo[0]}
。问题出在哪里?看起来你正在尝试做bash所说的间接引用,从我在上找到的数组变量判断,这显然是相当困难和麻烦的。你可以用
eval
更容易地完成你需要的,就像
eval“fstat=\${fanrp$f2[$f]}
,但请记住,使用
eval
存在一些安全问题。我会先阅读我链接到的Bash FAQ页面。如果您开始考虑
[…]
而不是作为索引语法,而是作为变量名称的一部分,那么间接数组引用就更容易了。如果您有一个数组
foo
,那么
foo[0]
foo[1]
等都是命名奇怪的变量,每个变量都有自己的值。然后
x=foo[0]
自然会导致
${!x}
等同于
${foo[0]}
。问题出在哪里?看起来你正在尝试做bash所说的间接引用,从我在上找到的数组变量判断,这显然是相当困难和麻烦的。你可以用
eval
更容易地完成你需要的,就像
eval“fstat=\${fanrp$f2[$f]}
,但请记住,使用
eval
存在一些安全问题。我会先阅读我链接到的Bash FAQ页面。如果您开始考虑
[…]
而不是作为索引语法,而是作为变量名称的一部分,那么间接数组引用就更容易了。如果您有一个数组
foo
,那么
foo[0]
foo[1]
等都是命名奇怪的变量,每个变量都有自己的值。然后
x=foo[0]
自然会导致
${!x}
等同于
${foo[0]}
。第一个选项实际上给了我一个坏的替换错误,这是我第一次尝试时写的,我不知道为什么会出现这个错误。但是,我认为你的第二个解决方案对我来说更有意义,谢谢它工作得很好,我不知道,因为第一个选项实际上给了我一个坏的替换错误,这就是为什么当时,我为我的第一次尝试写了一篇文章,我不知道为什么会出现这样的错误。但是,我认为你的第二个解决方案对我来说更有意义,感谢它工作得很好,因为我不知道第一个选项实际上给了我一个糟糕的替代错误,这是我为我的第一次尝试写的,我不知道为什么会出现这样的错误这个错误。然而,我认为你的第二个解决方案对我来说更有意义,感谢它工作得很好,我不知道,因为第一个选项实际上给了我一个糟糕的替代错误,这是我为我的第一次尝试写的,我不明白为什么我会出现这个错误。然而,我认为你的第二个解决方案对我来说更有意义我,谢谢,效果很好我不知道arr