?
é um glob (padrão, curinga) que corresponderá a nomes de arquivos que consistem exatamente em um caractere; ele é substituído pelos arquivos correspondentes no diretório atual. Se não houver arquivos correspondentes no diretório atual, ?
permanecerá inalterado e sua função será acionada. Isso é chamado de expansão do nome do caminho em man bash
e expansão do nome do arquivo no manual de referência bash
Nesse caso, aparentemente, você tem um arquivo chamado 0
no diretório atual, portanto, ? foo
é alterado para 0 foo
pela expansão pathaname e, em seguida, ele tenta executar um comando chamado 0
with foo
como argumento. Se você remover / renomear esse arquivo para algo maior que um caractere, sua função deve começar a funcionar. Como alternativa, você pode usar \?
ou "?"
ou '?'
para evitar que ele seja tratado como um glob.
Em uma nota lateral, usar ?
em um nome de função não está documentado e não é recomendado. Somente alfanuméricos e sublinhados são documentados para funcionar (o mesmo que é permitido para nomes de variáveis ).