이것이 왜 작동하는지 설명할 수 있는 사람이 있는지 궁금합니다.
echo `cat <<EOF
{"branch":"foo","value":"bar"}
EOF`
하지만 그렇지 않습니다:
echo <<EOF
{"branch":"foo","value":"bar"}
EOF
(두 번째 조각은 표준 출력에 아무 것도 표시하지 않습니다.)
답변1
echo는 stdIn에서 읽지 않기 때문입니다. 이 시도:
echo foo bar | echo
그러나 cat은 인수에 파일이 없는 경우에만 이 작업을 수행합니다.
echo foo bar | cat
첫 번째 예는 결과를 ...
echo에 대한 인수로 삽입하는 것입니다. 두 번째 예는 에코에 HEREDOC을 제공하므로 무시됩니다.
또한 첫 번째 예는 echo에 대한 인수를 보호하지 않습니다. 이는 셸이 이를 echo에 전달한 후 다시 확장한다는 의미입니다.
유해한 문자를 작동하지 않는 뱅으로 처리합니다.
echo `cat <<EOF
{"branch":"foo","value":"bar!"}
EOF`
이는 다음을 수행합니다.
echo "`cat <<EOF
{"branch":"foo","value":"bar!"}
EOF`"