这是我刚刚发现的黑客:
DEBUG=true
$DEBUG && echo "Hello"
这恰好可行,因为true
是一个返回0的实际命令,而&&
运算符对此感到满意:
» true
» echo $?
0
如果设置了变量,是否存在执行一段代码的非hackish方式,除了空字符串外,无论值是什么?像这样的东西,但作为一个可读单行(如上所述):
myvar="ggg"
if [ "$myvar" != "" ] ; then echo "Hello" ; fi
答案 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