Вы можете использовать два метода, если вы хотите сохранить ваш данный пример:
Eva Expr \ $ {l_ $ i} + $ b
= L_ $ i; EXPR $ {! Ref} + $ B;
Как упомянул Choroba Bash
, чувствителен к регистру, поэтому, пожалуйста, будьте осторожны с вашими именами переменной.
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
установлено выше в текущей оболочке - оно может быть расширено или изменено обычным способом. Это происходит без накладных расходов на подоболочку/трубу, необходимых для вызова/включения expr
и его родительской оболочки для каждой итерации.
OUTPUT:
110
120
130
140
150
Или, если вы действительно хотите использовать expr
:
for i in 1 2 3 4 5
do sum=`expr "$((l_$i))" + "$b"`
echo "$sum"
done
OUTPUT:
110
120
130
140
150
Я не эксперт по 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
Переменная i цикла for будет инициализирована как '$ l_1', '$ l_2' и так далее. Вызов eval затем преобразует значение i в dvar , которое затем может быть использовано в арифметическом выражении.
Вместо использования l_i или списка в виде строк используйте массивы:
#! /bin/bash
b=11
l=(12 24 46 68 92)
for i in "${l[@]}" ; do
((sum=i+b))
echo $sum
done