Eu faria isso:
add_84_hours() {
local datestamp=
local start_hour=
local epoch=$(date -ud "$datestamp $start_hour:00" +%s)
date -ud "@$(( epoch + 84*3600 ))" +"%Y %_m %e %k"
}
Vamos ver o que ele retorna:
$ add_84_hours now 18
2014 2 28 6
$ add_84_hours 2014-02-26 18
2014 3 2 6
$ add_84_hours 2016-02-26 18 # leap year
2016 3 1 6
Para salvar esses valores em variáveis:
read end_year end_month end_day end_hour < <(add_84_hours now 18)
printf "%s\n" "$end_year" "$end_month" "$end_day" "$end_hour"
2014
2
28
6