bash -c 'some command'retém o acesso à entrada padrão do chamador; portanto, os readcomandos de leitura da entrada padrão funcionarão normalmente. bash <<< 'some command'substitui a entrada com a linha que está sendo transmitido, por isso bash -c cate bash <<< catfazer coisas diferentes.
$ bash -c cat
abc
abc
^D
$ bash <<< cat
$
Por outro lado, você pode usar esse recurso para fornecer sua própria entrada padrão a ser usada $'...', se você for muito cuidadoso:
$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$
Eu não gostaria de confiar nisso, mas às vezes poderia ser conveniente.
bash -ctambém permite que argumentos sejam passados para o script e $0sejam definidos:
bash -c 'some command' sh abc def
irá definir $1para abce $2para defdentro some command.