有人能帮助我吗?我一直在尝试替代方案,但我仍然得到相同的输出。
这是我的剧本
#!/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
答案 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
我得到了bash
和sh
运行脚本的内容。显然,如果您未在$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
删除变量的值,只留下名称。