Essa é uma característica conhecida do GNU getopt (usada para análise de opções por ferramentas GNU).
grep hi -vR
é exigido pelo POSIX para procurar hi no arquivo chamado -vR , já que muitas opções não são reconhecidas por argumentos não-opcionais (como hi aqui).
A maioria das ferramentas GNU ou ferramentas que estão sendo usadas ou a API GNU getopt no modo padrão não honram isso a menos que POSIXLY_CORRECT esteja no ambiente.
Então você precisa:
POSIXLY_CORRECT=1 grep hi *
(forçar grep a se comportar de uma maneira compatível com POSIX) ou
grep -- hi *
(marque explicitamente o final das opções com -- ) ou
grep hi ./*
(verifique se todos os nomes de arquivos começam com ./ e, portanto, não - ).
Em qualquer caso, com:
grep -e hi -vR
você teria o problema com o GNU e com o não-GNU grep , já que hi não é um argumento não-opcional, mas um argumento para a opção -e , então você precisaria:
grep -e hi -- *
ou (melhor como também resolve o problema de um arquivo chamado - ):
grep -e hi ./*
(POSIXLY_CORRECT não ajudaria).