这是我刚刚发现的一个黑客攻击:
DEBUG=true
$DEBUG && echo "Hello"
Run Code Online (Sandbox Code Playgroud)
这恰好工作,因为true是一个返回0的实际命令,&&操作员对此感到满意:
» true
» echo $?
0
Run Code Online (Sandbox Code Playgroud)
如果设置了一个变量,是否有一种非hackish方式执行一段代码,除了空字符串之外的任何值?像这样的东西,但作为一个可读的单行(如上所述):
myvar="ggg"
if [ "$myvar" != "" ] ; then echo "Hello" ; fi
Run Code Online (Sandbox Code Playgroud)
如果要使用该值:
[[ -n $DEBUG ]] && echo "Hello"
Run Code Online (Sandbox Code Playgroud)
如果你想使用值的否定:
[[ -z DEBUG ]] && echo "Hello"
Run Code Online (Sandbox Code Playgroud)
我觉得这是最短的.
不要依赖变量的值来获得可执行值(以及您想要执行的值),而是定义一个只检查值是否已设置的函数.
debug () [[ -v DEBUG ]]
debug && echo "Hello"
Run Code Online (Sandbox Code Playgroud)
如果DEBUG设置完全,即使是空字符串,debug也会成功并执行以下命令.
如果DEBUG未设置并且您希望脚本运行调试命令,则只需将其调用为
DEBUG= ./myscript
Run Code Online (Sandbox Code Playgroud)
如果DEBUG已设置,则可以先取消设置.
unset DEBUG
./myscript
Run Code Online (Sandbox Code Playgroud)
如果值DEBUG的确无关紧要,那么你可以测试它是否具有非空值而不是使用-v:
debug () [[ -n $DEBUG ]]
Run Code Online (Sandbox Code Playgroud)
要在调试模式下运行脚本,请选择任意非空值
DEBUG=1 ./myscript
Run Code Online (Sandbox Code Playgroud)
要在"真实"模式下运行脚本,即使DEBUG您的环境中已设置了当前脚本,请使用
DEBUG= ./myscript
Run Code Online (Sandbox Code Playgroud)