2015-10-28 2 views
0

У меня есть две даты, которые IM погрузочные в переменные, используяРасчет и отображение разницы дат

a=`date +%s` 
b=`date +%s` 

я хочу знать разницу между временем например, разница 00:00:10 и так далее, я бы вычислить его с помощью

diff=$((b-a)) 
echo "$((diff/3600)):$(((diff/60)%60)):$((diff%60))" 

, но вывод 0: 0: 07, как я могу преобразовать его в 2 точки = 00:00:07?

ответ

0

Если длина строки 1, то добавляется ноль со значением

hour=$((diff/3600)) 
min=$(((diff/60)%60)) 
sec=$((diff%60)) 
[[ ${#hour} == 1 ]] && hour="0$hour" || hour="$hour" 
[[ ${#min} == 1 ]] && min="0$min" || min="$min" 
[[ ${#sec} == 1 ]] && sec="0$sec" || sec="$sec" 
echo "$hour:$min:$sec" 

Выход:

  00:00:16 
+0

, если я получаю это правильно это синтаксис для команды теста, но что $ {# часа } (hasthag) и && и || операнды означают в unix? кажется, что он не такой же, как на других языках = и, или – Darlyn

+1

# вернет длину переменной. &&, || это краткая форма тройного оператора, например if ... else – loganaayahee

+0

$ {# varname} - длина переменной и &&, || используется для отображения вида тройного оператора в bash. Если условие истинно, оно будет возвращать 0 со значением, иначе мудрый возвращает значение – loganaayahee

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