$ date -d "Apr 1 2016 - 1 month" +%B
me da "marzo", lo cual es genial: el mes anterior a abril es marzo. Si hago esto sin embargo:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
me da "febrero". Esto está causando un error en un código más complejo que tengo. ¿Por qué estos 2 comandos muestran resultados diferentes?

MarchRespuestas:
Puede ver el problema activando el rastreo de shell:
Cuando usa la salida del
datecomando interno , es a principios de abril, y al restar un mes se encuentra con la discontinuidad debido al cambio EST / EDT:Sus resultados, por supuesto, variarán de acuerdo con la configuración de su zona horaria local. Activar el seguimiento mostrará la zona horaria (en mi caso,
EDT).La razón por la cual los resultados difieren es que, en este último caso, le ha dado más información y ha
datehecho que su parámetro sea más específico , es decir, la hora específica del día. En la primera parte, eso no se especificó, dandodatemás margen de maniobra sobre cómo determinar la fecha / hora para mostrar.fuente
date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"obtengo exactamente el mismo resultado, incluida la misma etiqueta de zona horaria. ¿Por qué eliminar un mes de ambos da resultados diferentes?