Não é um recurso do Bash, ou qualquer shell, mas uma convenção em muitos aplicativos para explicitamente dizer a eles para lerem de stdin
. É claro que muitos programas leem stdin
se nenhum outro arquivo for mencionado, mas mesmo nesse caso, você precisa ser capaz de especificar explicitamente stdin
se quiser que ele seja processado junto com outros arquivos. Por exemplo, cat foo -
para que cat
leia o arquivo foo
e stdin
.
No caso de apt-key
, a página de manual implica que dar um nome de arquivo para o subcomando add
é obrigatório e que -
deve ser especificado para usar stdin
. Lembre-se de que cabe ao aplicativo fazer o que quiser e ler qualquer entrada que desejar; Não há nada que requeira que algum programa leia stdin
. Usá-lo como a fonte padrão para entrada é apenas um costume.
Alguns programas não suportam -
como significando stdin
, mas aceitam como um nome de arquivo literal. Nesses casos, soluções alternativas como /dev/stdin
são necessárias.
Quanto a >&-
, não consigo ver que eles seriam explicitamente conectados. Provavelmente é apenas um uso um tanto quanto coincidente de um personagem simples. Em >&-
, o traço provavelmente vem de uma conexão com um ataque que significa "nada", um campo vazio. Por que é usado para significar stdin
, não sei. Mas parece melhor do que %
ou algo assim, e vários outros personagens têm outros significados.