A parte importante neste caso é
The list of files terminates at the next argument starting with
-, the end of the command line, or the list terminator@(an argument that is just@).
Quando você escreve
zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' tmp/small_v.zip bin
tmp/small_v.zip e bin são tratados como arquivos fornecidos para --include , portanto, o comando zip acaba sem nenhum arquivo de destino nem arquivos para processar.
--include pode ser colocado em qualquer lugar, mas seus argumentos ainda têm que fazer sentido, e os argumentos restantes precisam ser identificáveis. Você poderia escrever seu comando como
zip --include '*.rb' '*.sh' '*.zsh' '*irb*' -r tmp/small_v.zip bin
em vez disso, usando o parâmetro -r para identificar o final da lista de arquivos para --include ou use @ para finalizar a lista:
zip -r --include '*.rb' '*.sh' '*.zsh' '*irb*' @ tmp/small_v.zip bin
Há exemplos muito semelhantes no final da seção --include em o zip(1) manpage .