2016-09-21 61 views
3

这是我刚刚发现一个黑客:短的方式来运行命令,如果变量设置

DEBUG=true 
$DEBUG && echo "Hello" 

而这恰好是工作,因为true是一个实际的命令,它会返回0,&&运营商很满意即:

» true 
» echo $? 
0 

有一个变量被设置执行一段代码的非hackish的方式,任何值,除了空字符串?事情是这样的,但作为一个可读的一行(像上面的):

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

'[[-n“$ myvar”]] && echo“Hello”'应该可以工作 – anubhava

+0

'[-z $ {myvar + x}] && echo“Hello”'[另见](https:// stackoverflow .com/questions/3601515 /如何检查,如果变量是在集合中) – redneb

+0

我不认为它是hackish。 – hek2mgl

回答

5

不是依靠变量的值有一个可执行的值(和值,你的要被执行),定义一个函数来简单地检查值是否被设置。

debug() [[ -v DEBUG ]] 

debug && echo "Hello" 

如果DEBUG在所有设置,甚至为空字符串,debug会成功,下面的命令执行。

如果DEBUG未设置你希望你的脚本运行调试命令,简单地调用它作为

DEBUG= ./myscript 

如果DEBUG设置,你可以先取消它。

unset DEBUG 
./myscript 

如果DEBUG价值真正重要无论出于何种原因,那么你可以测试它有一个非空值,而不是使用-v

debug() [[ -n $DEBUG ]] 

运行脚本在调试模式下,选取任意非空值

DEBUG=1 ./myscript 

要运行您在“真实”的模式v脚本即使DEBUG是在您的环境当前设置,使用

DEBUG= ./myscript 
1

如果你想使用的值:

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

如果你想使用的值的否定:

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

这就是我认为是最短

相关问题