Bash三元运算在任一布尔条件下都给出相同的输出

时间:2015-06-24 21:25:35

标签: bash ternary

因此,在我的bash脚本中,我将状态报告输出到终端并将其写入日志文件。我想使用一个bash三元运算符,它将输出到终端,如果变量LOG_TO_TERMINAL为真,则写一个日志文件,如果设置为false,只需写入日志文件而不向终端输出状态。

我的示例代码如下所示:

[[ $LOG_TO_TERMINAL ]] && echo "error message" >> $LOG_FILE || echo "error message" | tee -a $LOG_FILE

只是记录文件而不是回显到终端,无论我将LOG_TO_TERMINAL设置为true还是false

为了解决问题,我尝试将代码简化为:

[[ $LOG_TO_TERMINAL ]] && echo "log to terminal" || echo "don't log to terminal"

但是这个代码片段也回应了“log to terminal”,无论它的价值是什么。

2 个答案:

答案 0 :(得分:2)

测试[[ $LOG_TO_TERMINAL ]]测试LOG_TO_TERMINAL是否有值。没有其他的。 shell不会将false(或0null等)视为特殊的false-y值。

如果您想进行其他测试,则需要专门测试。

[[ $LOG_TO_TERMINAL = true ]]

[[ $LOG_TO_TERMINAL != false ]]

[[ $LOG_TO_TERMINAL = 1 ]]

如果您希望使用true和/或false 命令中的返回码,则需要$LOG_TO_TERMINAL && Y || Z或类似命令来运行存储的命令在变量中(虽然我不推荐这个版本的测试)。

另请注意,X && Y || Z 是shell中的三元操作。有关详细信息,请参阅Shellcheck wiki以获取警告SC2015

答案 1 :(得分:0)

你想要这个:

[[ $LOG_TO_TERMINAL = 1 ]] && echo "log to terminal" || echo "don't log to terminal"