不带引号的 Heredoc 不扩展参数



我正在尝试像这样在 heredoc 中创建和使用变量,

#!bin/bash
sudo su - postgres <<EOF
IP="XYZ"
echo "$IP"
EOF

这不起作用,我得到一个空行作为回声。但是如果我像这样用引号括EOF

#!bin/bash
sudo su - postgres <<"EOF"
IP="XYZ"
echo "$IP"
EOF

它有效。有人可以解释一下吗?根据我在man中读到的内容,行为应该是相反的。

shell 计算此处未带引号的文档,并在将其传递给命令之前执行变量插值(在您的情况下为 sudo )。由于 IP 不是父 shell 中定义的变量,因此它会扩展为空字符串。

使用引号可以防止父 shell 进行变量插值,因此由 sudo 运行的 shell 会看到并展开变量。

相关内容

  • 没有找到相关文章

最新更新