Outros responderam a pergunta básica: o que é isso?
Agora, por que é útil? Você também pode alimentar uma string para o stdin de um comando assim:
echo "$string" | command
No entanto, no bash, introduzir um pipe significa que os comandos individuais são executados em subshells. Considere isto:
echo "hello world" | read first second
echo $second $first
A saída do segundo comando echo imprime um único espaço. Whaaaa O que aconteceu com minhas variáveis? Como o comando read está em um pipeline, ele é executado em um subshell. Ele lê corretamente 2 palavras de seu stdin e atribui às variáveis. Mas então o comando é concluído, o subshell sai e as variáveis são perdidas.
Às vezes, você pode resolver isso com chaves:
echo "hello world" | {
read first second
echo $second $first
}
Tudo bem se a sua necessidade pelos valores estiver contida, mas você ainda não tem essas variáveis no shell atual do seu script. Para remediar esta situação confusa, use uma string here
read first second <<< "hello world"
echo $second $first
Ah, muito melhor!