В ksh93
:
$ printf '%(%F)T\n' 'next month, first Monday'
2017-04-03
bash
, начиная с 4.2 теперь поддерживает %(<формат)T
в своем printf
байтине, но не способность разбирать этот вид выражения даты.
Если бы вам пришлось использовать bash
и вы хотели использовать этот %(<формат>)T
, вы могли бы сделать это без форка с помощью чего-то вроде:
printf -v code '%(
t=$((%s + (12 - %-H) * 60 * 60))
increment=$((8 - %u))
current_month=%m)T' -1
eval "$code"
until
t=$((t + increment * 24 * 60 * 60)) # next Monday around mid-day
printf -v code '%(date=%F month=%m)T' "$t"
eval "$code"
[ "$month" != "$current_month" ] # until be get to next month
do
increment=7 # the first increment is the number of days
# til Monday. Next increments are just a week.
done
echo "$date"