如果设置了变量,则运行命令的简短方法

时间:2016-09-21 14:53:59

标签: bash

这是我刚刚发现的黑客:

DEBUG=true
$DEBUG && echo "Hello"

这恰好可行,因为true是一个返回0的实际命令,而&&运算符对此感到满意:

» true
» echo $?
0

如果设置了变量,是否存在执行一段代码的非hackish方式,除了空字符串外,无论值是什么?像这样的东西,但作为一个可读单行(如上所述):

myvar="ggg"
if [ "$myvar" != "" ] ; then echo "Hello" ; fi

2 个答案:

答案 0 :(得分:6)

如果您想使用以下值:

[[ -n $DEBUG ]] && echo "Hello"

如果你想使用值的否定:

[[ -z DEBUG ]] && echo "Hello"

我认为这是最短

答案 1 :(得分:5)

不是依赖变量的值来获得可执行值(以及你想要执行的值),而是定义一个只检查值是否已设置的函数。

debug () [[ -v DEBUG ]]

debug && echo "Hello"

如果DEBUG设置为,即使是空字符串,debug也会成功,并执行以下命令。

如果未设置DEBUG并且您希望脚本运行调试命令,只需将其作为

调用即可
DEBUG= ./myscript

如果设置了DEBUG,您可以先取消设置。

unset DEBUG
./myscript

如果DEBUG的值因任何原因确实很重要,那么您可以测试它是否具有非空值而不是使用-v

debug () [[ -n $DEBUG ]]

要在调试模式下运行脚本,请选择一个任意的非空值

DEBUG=1 ./myscript

在"真实"中运行您的脚本即使您的环境中当前设置了DEBUG,也请使用

DEBUG= ./myscript