Não tem nada a ver com o shell, mas com o comando date
. A opção -d
é específica da implementação GNU do comando date
. Em sistemas não-GNU, isso não funcionará a menos que você instale a versão GNU de date
como um pacote separado (que provavelmente seria instalado como gdate
ou como /opt/gnu/bin/date
...).
Note que versões recentes do ksh93 possuem um recurso similar com o comando printf
builtin:
printf '%(%Y%m)T\n' '1 month ago'
(veja também zsh
para outro shell com suporte a manipulação de data embutida ( strftime
embutido no módulo zsh/datetime
)).
Algumas outras implementações de date
também possuem recursos para ajustar datas. Por exemplo, com BSD date
, você poderia fazer:
date -v -1m +%Y%m
Não estou ciente de que o AIX vem com um comando que faz o cálculo de data e não há nenhum comando no toolchest POSIX, portanto, nenhum comando padrão / portátil para isso. Você pode reverter para perl
ou fazer o cálculo manualmente:
eval "$(date +'y=%Y m=%m')"
m=$((${m#0} - 1))
[ "$m" -gt 0 ] || m=12 y=$((y - 1)) # January case
printf '%d%02d\n' "$y" "$m"