Cat

為什麼 echo <<EOF … EOF 不起作用

  • August 14, 2018

只是想知道是否有人可以解釋為什麼會這樣:

echo `cat &lt;&lt;EOF
 {"branch":"foo","value":"bar"}
EOF`

但這不是:

echo &lt;&lt;EOF
 {"branch":"foo","value":"bar"}
EOF

(第二個片段不會向標準輸出回顯任何內容。)

因為 echo 從不從 stdIn 讀取。試試這個:

echo foo bar | echo

但是 cat 確實如此,當且僅當它的 args 中沒有文件時:

echo foo bar | cat

你的第一個例子是插入結果...作為迴聲的參數。您的第二個範例是將 HEREDOC 提供給回顯,因此被忽略。

另外,您的第一個範例沒有保護 echo 的參數,這意味著 shell 在將其傳遞給 echo 後將再次擴展它。

將有害字元視為 bang,這是行不通的:

echo `cat &lt;&lt;EOF
 {"branch":"foo","value":"bar!"}
EOF`

這樣做:

echo "`cat &lt;&lt;EOF
 {"branch":"foo","value":"bar!"}
EOF`"

引用自:https://unix.stackexchange.com/questions/462398