我想测试函数的输出是否与我设想的它应该写入标准输出的文本相匹配。但下面的代码从未打印出来test PASS
,我不知道为什么。我也尝试\n
在变量中放入各种字符或删除它们,GROUND_TRUTH
但这没有帮助。
error_out()
{
printf "%s\n" "${ERROR}"
printf "Return to exit\n"
read -r THROW_AWAY
exit
}
ERROR="Test output."
OUTPUT_TO_TEST=$(error_out)
GROUND_TRUTH="Test output.\nReturn to exit\n"
{ [ "${OUTPUT_TO_TEST}" = "${GROUND_TRUTH}" ] \
&& printf "error_out test PASS\n"; } \
|| { \
printf "error_out test FAIL\n"; \
}
您有两个问题:
命令替换的结果
$(...)
永远不会以 结尾LF(因为它们被 shell 修剪了)。因此,你的GROUND_TRUTH
变量不应该以LFshell 无法理解
\n
该字符的转义序列LF。由于您的目标是 POSIX shell,因此您必须LF在字符串文字中使用实数。因此,使您的代码按预期工作的最小修复方法是替换:
和: