2015-08-10 1 views
2

Я не понимаю, как это правильно прочитать. Это оператор IF без каких-либо тестовых флагов, поэтому я не понимаю логику ... помощь?IF без тестовых флагов?

#!/bin/bash 
    get_user_input() { 
     if [[ $1 ]]; then 
     use_default=1 
     else 
     use_default= 
     fi 

Я понимаю, что это функция. Я понимаю, что его вызов для первого позиционного аргумента ($ 1), но я не понимаю, почему его в выражении IF, если они ничего не тестируют.

Мне было поручено переписать сценарий у поставщика, и у них есть такие вещи повсюду. Я думаю, что, возможно, они целенаправленно занимаются сложными делами для обеспечения безопасности работы?

Я ценю помощь!

ответ

2

От man bash под CONDITIONAL EXPRESSIONS:

string 
-n string 
    True if the length of string is non-zero. 

Так это же, как и [[ -n $1 ]] (хотя явно менее читаемыми для тех, кто знаком с другими оболочками). Лично я предлагаю вам использовать [[ -n $1 ]], чтобы сделать нужное поведение явным.

Если вы заинтересованы в том, чтобы сценарий стал более переносимым, вы должны пойти за [ -n "$1" ].

0

лучше, чем при использовании if заявления является использование следующего разложения параметра:

use_default=${1:+1} 

Если $1 имеет ненулевое значение, use_default устанавливаются в 1; в противном случае он получает нулевое значение, полученное в результате расширения $1.