Cat
為什麼 echo <<EOF … EOF 不起作用
只是想知道是否有人可以解釋為什麼會這樣:
echo `cat <<EOF {"branch":"foo","value":"bar"} EOF`
但這不是:
echo <<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 <<EOF {"branch":"foo","value":"bar!"} EOF`
這樣做:
echo "`cat <<EOF {"branch":"foo","value":"bar!"} EOF`"