Интересно, это ошибка в Bash (или поведение обратной косой черты -новой строки просто не определено ). Все другие оболочки, которые я пробовал, ведут себя иначе, чем Bash:
$ cat nl.sh
echo "1:"
cat <<EOF
a \\
b \\
c
EOF
echo "2:"
var=$(cat <<-EOF
a \\
b \\
c
EOF
)
echo "$var"
выход:
$ bash nl.sh
1:
a \
b \
c
2:
a \b \c
против
$ dash nl.sh
1:
a \
b \
c
2:
a \
b \
c
Вы можете поместить код внутри подстановки команд в функцию, которая может помочь в решении любых проблем с синтаксическим анализатором, например.:
f() {
cat <<EOF
a \\
b
EOF
}
var=$(f)
echo "$var"