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