bash -c 'some command'сохраняет доступ к стандартному вводу вызывающей стороны, поэтому readчтение команд из стандартного ввода будет работать нормально. bash <<< 'some command'заменяет этот ввод передаваемой строкой, bash -c catи bash <<< catделает разные вещи.
$ bash -c cat
abc
abc
^D
$ bash <<< cat
$
С другой стороны, вы можете использовать эту функцию, чтобы предоставить свой собственный стандартный ввод, который будет использоваться $'...', если вы очень осторожны:
$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$
Я бы не хотел на это полагаться, но иногда это было бы удобно.
bash -cтакже позволяет передавать аргументы в сценарий и $0устанавливать:
bash -c 'some command' sh abc def
будет установлен $1в abcи $2к defвнутренней some command.