Что проверяет этот конкретный оператор сценария оболочки?

Я не хороший эксперт по Shell Script. Может ли кто-нибудь помочь мне понять и объяснить утверждение [ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] &&из следующего фрагмента. Что делает и / или проверяет это конкретное утверждение?

Однако я могу понять это утверждение: TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep Started |cut -d"=" -f2), Это в основном вызывает инструмент командной строки JMoss JMX для проверки состояния запуска сервера.

Фрагмент кода:

while [ $i -lt 180 ]; do
        TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep  Started |cut -d"=" -f2)

        [ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] && {
    echo "The $JBOSS_NAME server is up and running."
    return
}

2 ответа

Решение

Как указывают @drew-khoury и @ramruma, [ -z ... тест лишний.

С помощью TRUE поскольку имя переменной просто добавляет путаницы.

Фактический вопрос, на который пытается ответить фрагмент: twiddle.sh Распечатать Started=true? Или, в оболочке говорят:

jboss_is_started() {
    ($JBOSS_TWIDDLE get jboss.system:type=Server Started |
        grep 'Started=true' | read)
}

grep ... | read Конструкция вернет истину, если grep был успешным, при отбрасывании вывода.

if jboss_is_started; then
     echo "The $JBOSS_NAME server is up and running."
     return
fi

Сложные меры предосторожности против пустого $TRUE не нужны, если используются двойные кавычки.

[ "$TRUE" = 'true' ]

-Z проверяет, не является ли $TRUE не пустым, и:- ничего не подставляет, если оно не установлено. Это все ненужно. Возможно, это протест против чрезмерно предписывающего стандарта кодирования.

Другие вопросы по тегам