O próprio programa executa todos os nomes de arquivos que são passados para ele. A restrição para um sufixo .zip na conclusão não está relacionada ao que o programa faz. A conclusão é executada pelo shell. Quando você pressiona Tab , o shell analisa a linha de comando até certo ponto procura as regras de conclusão do contexto. Dependendo do shell, as regras de análise e conclusão do contexto podem ser mais ou menos complexas. Por exemplo, quando a linha de comando contém echo $P e você pressiona a tecla Tab , a maioria das camadas com a conclusão procura nomes de variáveis que começam com P . Por padrão, os shells completam os nomes dos arquivos, porque é um caso muito comum.
Bash, tcsh e zsh têm maneiras de tornar a conclusão programável: eles analisam o comando sob o cursor e procuram as regras para esse comando específico em uma tabela. Com a conclusão programável, a entrada na tabela para o programa unzip deve dizer que o primeiro argumento deve ser um arquivo .zip existente e os argumentos subsequentes devem ser nomes de membros do arquivo zip.
As regras de conclusão não estão contidas no próprio programa, mas elas podem ser enviadas juntamente com o programa no mesmo pacote. Por exemplo, um pacote que contém um comando /usr/bin/foo pode conter um arquivo /etc/bash_completion/foo que descreve como basear como concluir argumentos para o comando foo e um arquivo semelhante /usr/share/zsh/functions/Completion/_foo para zsh.