在循环中为单个变量使用多个值

时间:2011-12-07 19:36:06

标签: bash redhat

我有一个小循环问题,如下所示。

运行相同的脚本时,我有3个不同的值 -

va1="some-value1"
va2="some-value2"
va3="some-value3"

现在我想使用这三个变量值来运行相同的命令,比如 -

while (i=0,i<=3,i++)
do
bin/java -s (run something with $var);
done

现在我希望$ var在每次运行时获取var1,var2和var3的值,

所以有人可以告诉我我们如何实现上述目标?

我尝试过 -

for $1 $2 $3

do
case 1
case 2
case 3
done

OR

while read a b c
do
<code assumed to have loop iteration>
done <<< $(command)

但它没有按预期工作......非常感谢你对此的帮助。

谢谢, 布赖恩

3 个答案:

答案 0 :(得分:1)

你忘了语法的'in'部分:

for var in $va1 $va2 $va3
do 
    command $var
done

答案 1 :(得分:0)

while ((i=0,i<=3,i++))
do
eval bin/java -s \$var$i
done

这是如何使用eval的一个很好的例子。请注意1.外壳可以看到$ i的值,它会扫描该行。然后因为$ var像\$var那样被转义,所以不是。{ &#39;使可见&#39;在第一次扫描。 2. Eval强制对cmd-line进行第二次扫描,因此它会看到$ var1或其他内容,并将该值替换为命令行以供执行。

我希望这会有所帮助。

P.S。欢迎来到StackOverflow,让我提醒您我们通常在这里做的三件事:1)当您收到帮助时,请尝试给予它,回答您在专业领域的问题2)阅读常见问题解答,http://tinyurl.com/2vycnvr,3)当您看到良好的问答时,请使用灰色三角形http://i.imgur.com/kygEP.png对其进行投票,因为系统的可信度基于用户通过分享知识获得的声誉。还记得通过勾选复选标记http://i.imgur.com/uqJeW.png

来接受更好地解决问题的答案(如果有的话)

答案 2 :(得分:0)

您可以使用${!...}

进行间接变量扩展
va1="some-value1"
va2="some-value2"
va3="some-value3"
for ((i=1;i<=3;i++)); do
    varname="va$i"
    echo "$varname = ${!varname}"
done

打印:

va1 = some-value1
va2 = some-value2
va3 = some-value3