A ideia de -false é a chave, IMHO. Estou apenas adicionando a ele:
find . -false $(echo "-o -name *."{sh,pl,sql})
Você acabou de citar tudo para fazer o bash repetir todo o padrão, incluindo -o -name , e depois "quebrar" o agrupamento feito pela citação retornando-o de uma subcamada. O problema com essa abordagem é que as cotações no padrão não funcionarão.
EDIT: Veja o comentário de Michał Šrajer para outra armadilha desta solução. Note que você não pode simplesmente colocar uma barra invertida antes da estrela: a substituição do comando retorna um * , que será expandido, ou um \* , que será passado como está para ser encontrado (!). Pelo menos, é assim que meu bash local funciona.
Isso é o melhor que posso fazer:
(GLOBIGNORE='*:.*'; find . \( -false $(echo "-o -name *."{sh,pl,sql,xml}) \) -print)
Boa sorte:)
Btw, se você estiver não adicionando mais parâmetros a find , é claro que use apenas xargs ; Nesse caso, funciona perfeitamente, com citações e tudo:
echo "-o -name *."{sh,pl,sql} | xargs find . -false