2016-09-21 78 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" 

這就是我認爲是最短

相關問題