A única diferença entre as sintaxes <& e >& é que o primeiro verifica se o descritor de arquivo de destino está aberto para entrada e o segundo verifica se ele está aberto para saída. A operação real é a mesma em ambos os casos (provavelmente uma chamada dup2 ). Enquanto isso, > /dev/tcp/HOST/PORT não está fazendo open syscall, como a maioria dos redirecionamentos; a sintaxe /dev/tcp é um caso especial bash e, de fato, o bash está abrindo um soquete (que então se comporta como um descritor de arquivo normal w.r.t. as chamadas read e write ). Sockets não têm a propriedade que os arquivos abertos têm de ser abertos apenas para leitura ou gravação; um soquete permite ler e escrever (embora você possa shutdown(2) da metade disso, se quiser). Assim, o bash não faz erro de redirecionamento das duas sintaxes usadas, e como a chamada dup2 é a mesma, o comportamento é idêntico.