为什么回显

为什么回显

只是想知道是否有人可以解释为什么这有效:

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 的参数,这意味着 shell 将其传递给 echo 后再次扩展它。

将有害字符视为 bang,这是行不通的:

echo `cat <<EOF
  {"branch":"foo","value":"bar!"}
EOF`

这会:

echo "`cat <<EOF
  {"branch":"foo","value":"bar!"}
EOF`"

相关内容