无法在 bash heredoc 中执行 IF 语句



我正在尝试在 heredoc 中做一个IF..ELSE。heredoc 是必需的,因为命令集需要以不同的用户身份执行。

遗憾的是,IF语句无法按预期工作,并且总是跳转到ELSE子句。当我从 heredoc 中删除IF块并将其放在外面时,它按预期工作。

这可能是我错过的一件简单的事情,但我不知道是什么。

rem=0
function1 () {
su - user1 <<'DONE'
if [[ "$rem" -eq 0 ]];
then
echo rem is even
else
echo rem is odd
fi
DONE
}
function1

它呼应rem很奇怪。

用这个更改脚本的第 3 行:

su - user1 <<DONE

请注意 DONE 周围缺少引号。 在分隔符周围加上引号,您基本上可以停用参数替换,并且$rem的值不是您期望的值(只需回显它并查看(。如果没有引号,参数替换有效。

在装有 Bash 4.2.46 的 CentOS 7 上测试。

另请参阅此处的较长讨论:在 bash heredoc 中使用变量

相关内容

  • 没有找到相关文章

最新更新