我正在尝试像这样在 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 会看到并展开变量。