2016-09-21 7 views
3

Это хак я только что обнаружил:Короткий путь выполнить команду, если переменная установлена ​​

DEBUG=true 
$DEBUG && echo "Hello" 

И это как раз случается работать, потому что true является актуальной команда, которая возвращает 0, а оператор && доволен что:

» true 
» echo $? 
0 

есть не-хаком способ выполнить фрагмент кода, если переменная установлена, чтобы любого значения, за исключением пустой строки? Нечто подобное, но как читаемый однострочник (как показано выше):

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/how-to-check-if-a-variable-is-set-in-bashsee) – redneb

+0

Я не думаю, что это хаки. – 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 

Чтобы запустить вас г скрипт в режиме «реального», даже если DEBUG является текущим набором в вашей среде, используйте

DEBUG= ./myscript 
1

Если вы хотите использовать значение:

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

Если вы хотите использовать отрицание ценности :

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

Вот я думаю, что это кратчайшее.

Смежные вопросы