我正在尝试像这样在 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 会看到并扩展变量。
关于bash - 不带引号的 Heredoc 不扩展参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37561737/