我想从数字中减去一个值列表。
我试过了:
DATACOME=1013
DATAREF=1010
1020
var=$((DATACOME - DATAREF))
echo "$var"
3
仅适用于$DATAREF
中的第一个值,而输出3
代替:
echo "$var"
3
-7
答案 0 :(得分:2)
直接的方法是将值列表保存为数组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变量发生冲突。