Shell:如何在数字之间减去

时间:2017-12-02 22:18:20

标签: bash shell numbers echo

我想从数字中减去一个值列表。

我试过了:

DATACOME=1013
DATAREF=1010
1020

var=$((DATACOME - DATAREF))
echo "$var"
3

仅适用于$DATAREF中的第一个值,而输出3代替:

echo "$var"
3
-7

1 个答案:

答案 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
编辑关于@ dawg的建议,这是使用bc执行此操作的众多可行方法之一:

datacome=1013
dataref="1010 1020" 

for num in $dataref; do
   echo "$num-$datacome"
done | bc -l

有很多方法可以做到这一点。另外,请不要使用大写变量,因为它们可能会与环境和内部shell变量发生冲突。