gpt4 book ai didi

bash - 不带引号的 Heredoc 不扩展参数

转载 作者:行者123 更新时间:2023-11-29 09:37:47 25 4
gpt4 key购买 nike

我正在尝试像这样在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com