我有一个小循环问题,如下所示。
运行同一个脚本时,我要使用 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
或
while read a b c
do
<code assumed to have loop iteration>
done <<< $(command)
但它没有按预期工作...非常感谢您对此的帮助。
谢谢, 布莱恩
您忘记了语法中的“in”部分:
for var in $va1 $va2 $va3
do
command $var
done
您可以使用间接变量扩展
${!...}
:
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
尝试
while ((i=0,i<=3,i++))
do
eval bin/java -s \$var$i
done
这是如何使用
eval
的一个很好的例子。请注意,1. shell 扫描该行时会看到 $i 的值。然后因为$var像\$var
一样被转义了,所以它不是
在第一次扫描中“使其可见”。 2. Eval
强制对 cmd 行进行第二次扫描,因此它会看到 $var1 或其他内容,并且该值将被替换到命令行中以执行。