2014-01-21 2 views
2

У меня есть Баш скрипт, который отсекает некоторые временные метки вниз в виде SS.sss и сохраняет это в переменной:Вычитание двух переменных

s1=$(echo $t1 | cut -c7-) 
s2=$(echo $t2 | cut -c7-) 

Я хотел бы вычесть $s2 из $s1 (и магазин как $s3), но Я не могу получить expr для работы - есть ли еще один вариант?

+2

Как выглядят 's1' и' s2'? – devnull

+0

Проверьте это тоже http://stackoverflow.com/questions/10429943/script-calculator-division –

+0

's1' и' s2' находятся в форме 'SS.sss' из метки времени, например, 24.260. –

ответ

8

Вы можете сделать большинство Баш вычисления так:

s3="$((s2 - s1))" 

Те ограничиваются основные операции с целыми числами, если я правильно помню, так что такие вещи, как

s3="$(echo "$s2 - $s1" | bc)" 

может быть лучше.

+1

'$ ((...))' является частью стандарта POSIX, но не поддерживает арифметику с плавающей запятой. – chepner

+0

Я принял этот ответ как мой принятый ответ, потому что этот ответ работал на моей системе, а другой - нет. –

3

expr только обрабатывает целочисленную арифметику. Вы можете использовать bc:

s3=$(echo "$s1 - $s2" | bc) 
+0

По какой-то причине эта версия не будет работать в моей системе, но спасибо за помощь! –

+0

Это должно быть '$ (...)', а не '$ ((...))'. – choroba

+0

Упс, спасибо за редактирование devnull. У меня были арифметические выражения на мозге. – chepner

Смежные вопросы