因此,在我的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”,无论它的价值是什么。
答案 0 :(得分:2)
测试[[ $LOG_TO_TERMINAL ]]
测试LOG_TO_TERMINAL
是否有值。没有其他的。 shell不会将false
(或0
或null
等)视为特殊的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"