Bash realiza a expansão do shell em cada linha de comando. Uma dessas expansões é expansão de nome de arquivo que substitui *
de acordo com as regras padrões de correspondência .
No caso de evince *
, ele substitui o *
pelo conteúdo do diretório de trabalho atual. O conteúdo significa nomes de arquivos regulares, subdiretórios, links, etc. Arquivos de pontos são excluídos. Basicamente, o que você obtém executando ls
. No seu caso, nomes de arquivos de PDFs.
Portanto, o binário evince
é executado pelo Bash apenas uma vez, com argumentos que são alfabeticamente contidos no diretório de trabalho atual. A maneira como o Evince lida com o lançamento depois disso é com o Evince ou qualquer outro framework ou biblioteca do qual ele dependa, mas os barebones X não fazem nada de especial aqui. Evince ou X nem sabem que foi executado com *
. Por exemplo:
$ ls -a
. .. .hiddendoc.pdf doc1.pdf doc2.docx otherdoc.pdf somedir
$ evince *
# is equivalent to
$ evince doc1.pdf doc2.docx otherdoc.pdf somedir
Se você quiser saber como o *
é expandido, basta executar echo *
. Você pode perceber que, se o diretório de trabalho estiver vazio (contém apenas arquivos de pontos), o asterisco não será expandido e permanecerá como argumento para a execução de comandos.
Como mencionado no manual de Bashs vinculado, há várias configurações que alteram esse comportamento. Sem mencionar outras conchas.