List = 1 2 3 4 5
for i in $LIST
do
sum=`expr $l_$i + $b`
done
这里l_1
、l_2
、l_3
、l_4
和l_5
是具有某些值的变量。当我尝试使用循环变量访问 for 循环中的这些值时i
, i 的值在表达式中被替换,即语句(1 + $b)
被执行而不是($l_1 + $b)
。我尝试了各种$
符号组合,也使用了括号,但似乎没有任何效果。请帮忙!!
答案1
不要使用 l_i 或 list 作为字符串,而是使用数组:
#! /bin/bash
b=11
l=(12 24 46 68 92)
for i in "${l[@]}" ; do
((sum=i+b))
echo $sum
done
答案2
如果您想维护给定的示例,可以使用两种方法:
- 使用评估:
eval expr \${L_$i} + $b
- 使用参考变量:
REF=L_$i; expr ${!REF} + $b;
正如提到的 chorobabash
区分大小写,所以请小心你的变量名称。
答案3
l_1=10 l_2=20 l_3=30 l_4=40 l_5=50
b=100
for i in 1 2 3 4 5
do echo "$((sum=l_$i+b))"
done
的值$sum
是在当前 shell 中设置的 - 它可以以正常方式扩展或修改。发生这种情况时,无需为expr
每次迭代调用/分叉及其父 shell所需的子 shell/管道开销。
输出:
110
120
130
140
150
或者,如果你真的想使用expr
:
for i in 1 2 3 4 5
do sum=`expr "$((l_$i))" + "$b"`
echo "$sum"
done
输出:
110
120
130
140
150
答案4
我不是 bash 专家,但这就是我的想法
#!/bin/bash
b=1
l_1=1
l_2=2
l_3=3
for i in '$l_'{1,2,3}
do
eval dvar="${i}"
sum=$(($dvar + $b))
done
这我for 循环的变量将被初始化为“$l_1”、“$l_2”等。然后调用 eval 将评估以下值我进入德瓦尔然后可以在算术表达式中使用。