Em:
echo $IFS
você não duplicou a variável de citação, o conteúdo da variável sob efeito do operador glob + split em todos os shells parecidos com Bourne, exceto zsh :
echo glob(split($IFS))
Os caracteres em IFS em si são usados para divisão, então $IFS expandido para nada, você só tem uma linha vazia de echo .
Quando você dá aspas duplas em "$IFS" , o conteúdo de IFS foi passado para eco como está, você tem um espaço, uma guia e uma nova linha, que são os valores padrão de IFS .
%q do comando printf é uma extensão de ksh , bash e zsh , que exibirá a sequência em um formato que pode ser reutilizado como entrada do shell, mas não tem efeito a expansão das variáveis do shell.