apt foi projetado historicamente com o uso interativo de linha de comando em mente, daí o aviso codificado, que foi feito intencionalmente em / por apt e não pelo shell.
No entanto, apt não está necessariamente analisando a linha de comando; o shell já fez esse trabalho no momento em que chama apt . O que o apt está fazendo é detectar que o fluxo stdout foi alterado / redirecionado.
Quanto ao uso de apt em scripts, você tem o comando anterior mais antigo apt-get , que faz mais ou menos a mesma coisa, e não fornece esse aviso quando stdout é redirecionado.
TLDR Não é o shell que está gravando a mensagem de erro em stderr , é o comando apt .
O fato de você ser capaz de capturar a saída apt stderr no shell é um artefato do Unix sendo um sistema operacional multitarefa, e não significa que seja o shell que produz essa saída.
PS. Fazendo um strace no comando, pode ser visto apt escrevendo essa mensagem:
strace apt get install bash > a
....
write(2, "\n", 1
) = 1
write(2, "WARNING: ", 9WARNING: ) = 9
write(2, "apt", 3apt) = 3
write(2, " ", 1 ) = 1
write(2, "does not have a stable CLI inter"..., 38does not have a stable CLI interface. ) = 38
write(2, "Use with caution in scripts.", 28Use with caution in scripts.) = 28
write(2, "\n", 1
) = 1
write(2, "\n", 1
) = 1