Parece que o : s no seu script está sendo usado em vez de true . Se grep não encontrar uma correspondência no arquivo, ele retornará um código de saída diferente de zero. Como jw013 menciona em um comentário, se errexit for definido, provavelmente por -e na linha shebang, o script sairá se qualquer um dos grep s não conseguir encontrar uma correspondência. Claramente, não é isso que o autor queria, então ele adicionou || : para fazer com que o status de saída daquele comando composto em particular fosse sempre zero, como o mais comum (na minha experiência) || true / || /bin/true .