Почему два нижеприведенных похожих сценария имеют разное поведение?
Следующая команда:
{ echo a; echo b; } | awk $(cat <<'EOF'
{print $0}
EOF
)
завершается ошибкой с этим сообщением об ошибке:
awk: syntax error at source line 1
context is
>>> <<<
awk: illegal statement at source line 1
missing }
Однако, если я сначала сохраню heredo c в переменной, он будет работать:
cmd=$(cat <<'EOF'
{print $0}
EOF
)
{ echo a; echo b; } | awk "$cmd"
производит:
a
b
Я использую Ma c OS. Я могу воспроизвести, используя как zsh, так и POSIX sh
.