Este código funciona bem no Linux, mas não no Mac OS:
#!/usr/bin/env bash
foo=$(cat <<EOF
"\[^"\]+"
EOF
)
printf "%s" "$foo"
Ele falha no Mac com
./test.sh: line 6: unexpected EOF while looking for matching `"'
./test.sh: line 7: syntax error: unexpected end of file
Se eu fizer isso cat <<EOF
em vez de foo=$(cat <<EOF
, funciona bem. Existe uma maneira portátil de obter heredocs (ou strings multiline) em variáveis sem usar um arquivo como intermediário?
Editar : Quero usar um heredoc porque tenho uma string multilinha com "
and '
. Meu exemplo real se parece com:
EXPECTED_ERROR=$(cat <<EOF
Set
: Type
File "/tmp/tmp[A-Za-z0-9_/]\+\.v", line 1\(0\|1\), characters 0-15:
Error: The command has not failed\s\?!
.\?Does this output display the correct error? \[(y)es/(n)o\]\s
I think the error is 'Error: The command has not failed\s\?!
.\?'\.
The corresponding regular expression is 'File "\[^"\]+", line (\[0-9\]+), characters \[0-9-\]+:\\\\n(Error:\\\\s+The\\\\s+command\\\\s+has\\\\s+not\\\\s+failed.*
EOF
)