外壳:如何做减号

外壳:如何做减号

问题描述:

我想从一个数中减去一个值列表。外壳:如何做减号

我想:

DATACOME=1013 
DATAREF=1010 
1020 

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

它的工作原理只是第一个值$DATAREF和输出3代替:

echo "$var" 
3 
-7 
+0

选择不同的语言; 'bash'不是一种通用编程语言。 – chepner

直接的方法是值的列表保存为一个数组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变量发生冲突。

+1

很棒的回答。你可能会提到'bc',但也可能是完美的。 – dawg