Use set -x
para ver o que o comando realmente é depois que o shell o expande. Acontece que
printf [abcd]*[abcd]
em seu diretório é de fato
printf a.b ab.c b.a b.c c.d
Agora, printf
trata a.b
como FORMATO (consulte man 1 printf
) . Não inclui %s
nem nada disso, é por isso que o restante dos argumentos não importam e o literal a.b
é impresso.
Se você quiser que printf
se comporte mais como echo
, especifique o formato desejado, por exemplo:
printf '%s\n' [abcd]*[abcd]
imprimirá
a.b ab.c b.a b.c c.d
(Nota: use set +x
para reverter set -x
depois de concluir o teste.)