这段bashquery的逻辑

时间:2019-03-26 18:54:50

标签: linux bash shell

无法理解它在做什么

TEST_DEBUG=${TEST_DEBUG:-false}
[[ "$TEST_DEBUG" == false ]] || TEST_DEBUG=true

并进一步深入该代码的多个位置。此代码存在

$TEST_DEBUG && echo 1>&2

2 个答案:

答案 0 :(得分:2)

TEST_DEBUG=${TEST_DEBUG:-false}

false$TEST_DEBUG相关联,除非它已经具有值(请参阅man bash中的 Parameter Expansion )。

[[ "$TEST_DEBUG" == false ]] || TEST_DEBUG=true

[[ ... ]]的值为$TEST_DEBUG时,false中的条件将返回true。如果返回false,即值不同,则为$TEST_DEBUG分配true

$TEST_DEBUG && echo 1>&2

仅当echo设置为$TEST_DEBUG时,此命令才能运行true

echo(不带参数)仅将空行输出到标准输出。 1>&2将标准输出重定向到标准错误,因此,在这种情况下,空行被打印为标准错误。

答案 1 :(得分:0)

在第一条语句中,运算符:-测试括号内是否存在TEST_DEBUG变量并进行设置;如果设置了变量,则在TEST_DEBUG中为其赋值(如果未设置)或具有空值,则被分配为假。

TEST_DEBUG=${TEST_DEBUG:-false}

在第二句话中

[[ "$TEST_DEBUG" == false ]] || TEST_DEBUG=true

Bash检查TEST_DEBUG是否设置为false,否则将其分配为true。

有关其工作原理的更多信息,请查看GNU bash文档。

https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html#Conditional-Constructs