我正在尝试在 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 中使用变量