在循环中回显变量集

时间:2015-01-23 04:00:33

标签: bash shell loops variables sh

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

这是我的剧本

  #!/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

3 个答案:

答案 0 :(得分:3)

您正在寻找${!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运行脚本的内容。显然,如果您未在$var1=中加入echo,则只会获得您要求的单个字母。

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

答案 1 :(得分:2)

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

#!/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

答案 2 :(得分:1)

如果您不确定自己有多少个字段变量,可以使用以下内容:

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

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