在循环中回显变量集

echo the set of variables while going through a loop

谁能帮帮我。我一直在尝试替代方案,但我仍然得到相同的输出。

这是我的脚本

  #!/bin/sh

  field1="a"
  field2="s"
  field3="d"
  field4="f"
  field5="g"

  for i in {1..5}
  do

    var1="field"$i
    echo $var1

    var2="$"$var1
    echo $var2 

    echo $field1

  done

这是我的输出

  field1
  $field1
  a
  field2
  $field2
  a
  field3
  $field3
  a
  field4
  $field4
  a
  field5
  $field5
  a

我想要做的是获得类似

的输出
a
s
d
f
g

您正在寻找 ${!var1} — Bash 特定的 shell 参数扩展。

field1="a"
field2="s"
field3="d"
field4="f"
field5="g"

for i in {1..5}
do
    var1="field"$i
    echo $var1=${!var1}
done

输出:

field1=a
field2=s
field3=d
field4=f
field5=g

我通过 bashsh 运行 脚本得到了它。显然,如果您不在 echo 中包含 $var1=,您只会得到您要求的单个字母。

您还应该考虑您的字段是否应该存储在 Bash array.

你为什么不用数组?也许是这样的:

#!/bin/sh

  field[1]="a"
  field[2]="s"
  field[3]="d"
  field[4]="f"
  field[5]="g"

  for i in {1..5}
  do

    echo ${field[i]}

  done

当你不确定你有多少个字段变量时,你可以使用类似:

set | grep "^field" | cut -d= -f2

set 列出所有变量; grep选择'field'开头的; cut 删除变量的值,只留下名称。