Я не очень хорошо разбираюсь в Shell Script. Может ли кто-нибудь помочь мне понять и объяснить утверждение [ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] &&
из следующего фрагмента. Что делает и / или проверяется это конкретное утверждение?
Однако я могу понять это утверждение: TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep Started |cut -d"=" -f2)
. Это в основном вызов инструмента командной строки JMX JBoss для проверки статуса запуска сервера.
Фрагмент кода:
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
}
При использовании двойных кавычек нет необходимости в сложных мерах предосторожности против того, чтобы $ TRUE было пустым.
[ "$TRUE" = 'true' ]
-Z проверяет, не является ли $ TRUE пустым, и: - ничего не заменяет, если оно не установлено. Все это не нужно. Возможно, это протест против чрезмерно предписывающего стандарта кодирования.
Как отмечают @ 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
construct вернет true, если grep был успешным, при удалении вывода.
if jboss_is_started; then
echo "The $JBOSS_NAME server is up and running."
return
fi