2017-12-02 183 views
0

我想從一個數中減去一個值列表。外殼:如何做減號

我想:

DATACOME=1013 
DATAREF=1010 
1020 

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

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

echo "$var" 
3 
-7 
+0

選擇不同的語言; 'bash'不是一種通用編程語言。 – chepner

回答

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變量發生衝突。

+1

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