왜 에코 <

왜 에코 <

이것이 왜 작동하는지 설명할 수 있는 사람이 있는지 궁금합니다.

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`"

관련 정보