Essa não é a string aqui, é citando ANSI-C :
Words of the form $'string' are treated specially. ... The expanded result is single-quoted, as if the dollar sign had not been present.
Então, o que você tem é uma string de aspas simples à direita de <<<
. Essa string é tomada como a string aqui, sem processamento adicional.
Não há necessidade de usar apenas um único conjunto de citações em torno da palavra inteira, no entanto. Você pode usar várias partes citadas (ou palavras únicas sem aspas) reunidas:
script <<< "$var 2"$'\n'"3 4"$'\n'"5 6"$'\n'q
fará o que você queria.
Como alternativa, você pode excluir os espaços na barra invertida, em vez de citar "1 2"
.
Você também pode usar echo -e
com um tubo normal:
echo -e "$var 2\n3 4\n5 6\nq" | script
ou printf
:
printf '%s 2\n3 4\nq' "$var" | script
-e
é necessário para ativar o processamento de escape nos argumentos de echo
. printf
faz isso por padrão, mas tem seu próprio sistema de interpolação ( printf "$var 2\n3 4\nq"
também funcionará, mas é problemático se $var
puder conter caracteres de escape).