数字から値のリストを減算したい。シェル:番号間でマイナスを行う方法
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
を呼び出して、ループを使用して繰り返します。ループ:
datacome=1013
dataref=(1010 1020)
for num in "${dataref[@]}"; do
echo $((datacome - num))
done
あなたは空白文字で区切られた文字列に値を格納し、awk
を使用することができ、配列を使用したくない場合は、次の言葉のを使用してfor
ループと
datacome=1013
dataref="1010 1020"
awk -v num="$datacome" '{
for (i = 1; i <= NF; i++) {
print num-$i
}
}' <<< "$dataref"
か、再度分割この時間:
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
EDIT: @の仲の良い友達の推薦で、これはbc
でこれを行うには多くの可能な方法の一つである:
datacome=1013
dataref="1010 1020"
for num in $dataref; do
echo "$num-$datacome"
done | bc -l
本当にありますこれを行う方法がたくさんある。また、を入力しないでくださいは大文字の変数を環境変数や内部シェル変数と衝突させる可能性があるため使用してください。
すばらしい答え。 'bc'に言及することもできますが、そうでなければ完璧です。 – dawg
別の言語を選択してください。 'bash'は汎用プログラミング言語として意図されていません。 – chepner