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

dan*_*ast 5 bash

这是我刚刚发现的一个黑客攻击:

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)

Has*_*oun 7

如果要使用该值:

[[ -n $DEBUG ]] && echo "Hello"
Run Code Online (Sandbox Code Playgroud)

如果你想使用值的否定:

[[ -z DEBUG ]] && echo "Hello"
Run Code Online (Sandbox Code Playgroud)

我觉得这是最短的.

  • 您能告诉我该语法来自何处吗?我希望能够记录并理解为什么它有效[[-n $ DEBUG]]。 (2认同)

che*_*ner 5

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

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)