0
我想从一个数中减去一个值列表。外壳:如何做减号
我想:
DATACOME=1013
DATAREF=1010
1020
var=$((DATACOME - DATAREF))
echo "$var"
3
它的工作原理只是第一个值$DATAREF
和输出3
代替:
echo "$var"
3
-7
我想从一个数中减去一个值列表。外壳:如何做减号
我想:
DATACOME=1013
DATAREF=1010
1020
var=$((DATACOME - DATAREF))
echo "$var"
3
它的工作原理只是第一个值$DATAREF
和输出3
代替:
echo "$var"
3
-7
直接的方法是值的列表保存为一个数组dataref
,然后用for
循环对其进行迭代:
datacome=1013
dataref=(1010 1020)
for num in "${dataref[@]}"; do
echo $((datacome - num))
done
如果你不想使用数组,你可以存储你的价值观在用空白字符分隔字符串,并使用awk
:
datacome=1013
dataref="1010 1020"
awk -v num="$datacome" '{
for (i = 1; i <= NF; i++) {
print num-$i
}
}' <<< "$dataref"
再或者使用字处理一个for
循环拆分此时间:
datacome=1013
dataref="1010
1020"
for num in $dataref; do
echo $((datacome - num))
done
或使用文件来存储你的时候值:
#input_file:
#1010
#1020
datacome=1013
while read num; do
echo $((datacome - num))
done < input_file
awk -v num="$datacome" '{
for(i = 1; i <= NF; i++) {
print num-$i
}
}' < input_file
编辑:上@耶的建议,这是bc
的许多可能的方法可以做到这一个:
datacome=1013
dataref="1010 1020"
for num in $dataref; do
echo "$num-$datacome"
done | bc -l
真的会有很多方法来做到这一点。此外,请不要使用大写变量,因为它们可能会与环境和内部shell变量发生冲突。
很棒的回答。你可能会提到'bc',但也可能是完美的。 – dawg
选择不同的语言; 'bash'不是一种通用编程语言。 – chepner