bash -c 'some command'
retém o acesso à entrada padrão do chamador, portanto, read
ou comandos de leitura da entrada padrão funcionarão normalmente. bash <<< 'some command'
substitui essa entrada pela linha que está sendo passada, então bash -c cat
e bash <<< cat
fazem coisas diferentes.
$ bash -c cat
abc
abc
^D
$ bash <<< cat
$
Por outro lado, você poderia fazer uso desse recurso para fornecer sua própria entrada padrão para ser usada através de $'...'
, 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 pode ser conveniente.
bash -c
também permite que argumentos sejam passados para o script e $0
a ser definido:
bash -c 'some command' sh abc def
definirá $1
para abc
e $2
para def
dentro de some command
.