Como outros apontaram, o problema é que a data armazenada em $C
acima está sendo avaliada antes de ser passada para sua subshell (pelo uso de ''), então a subshell está tentando encontrar um comando literal chamado 'Tue' (ou seja, o início da sua string de data).
Para corrigir isso, você precisará passar o comando date de volta para uma versão GNU de date
usando a opção -d
, que terá uma data existente como entrada.
Eu ilustrei isso usando seu código de exemplo acima:
C=$(date)
G=$(gdate '+%Y%m%d' -d "$C")
echo "C = $C"
echo "G = $G"
Quais saídas
C = Tue Dec 31 10:33:29 EST 2013
G = 20131231
Observação: eu tive que usar gdate
para fazer isso funcionar no meu sistema (OS X).
Se você não tiver um comando date
compatível com GNU e não puder instalá-lo por qualquer motivo, o melhor que você poderia fazer seria manipular diretamente a string de data, usando algo como isto:
C=$(date)
D=$(echo "$C" | awk -F' ' '{ printf "%s-%s-%s", $6, $2, $3 }')
echo "C = $C"
echo "D = $D"
, que produz a seguinte saída:
C = Tue Dec 31 12:03:27 EST 2013
D = 2013-Dec-31