оператор bash if с нулевым значением - PullRequest
1 голос
/ 28 марта 2019

мое условие if с gt сравнивает значение, а также если значение равно нулю, но я хочу, чтобы gt сравнивало нулевое значение, я просто хочу, чтобы он сравнивал только значение

 res=''
 toto=5
 if [[  "$toto" -gt "$res"  ]]; then
    ... 
   else
    ...
   fi
 fi

решение такое, но не очень хорошее

 if [[ ! -z "$res"  ]]; then
   if [[  "$toto" -gt "$res"  ]]; then
     ... 
   else
     ...
   fi
 fi

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Использование &&.

if [[ ! -z "$res" && "$toto" -gt "$res" ]]

Другие улучшения, которые вы можете сделать:

  • Заменить ! -z на -n.
  • Удалить ненужные кавычки.
  • Используйте ((...)) для численных сравнений.
if [[ -n $res ]] && ((toto > res))
0 голосов
/ 29 марта 2019

Этот Shellcheck -чистый код обрабатывает пустое $res по-другому:

#! /bin/bash

res=''
toto=5
if [[ -z $res ]] ; then
    : # $res is empty so don't compare with $toto
elif ((  toto > res )); then
    echo 'toto is greater than res'
else
    echo 'toto is less than or equal to res'
fi

Однако, остается спорным, лучше это или хуже, чем предложенный вариант "не очень хорошо"в вопросе.Глубокое вложение, как правило, хуже, но лучше избегать цепочек «если иное».Единственное преимущество, которое я бы потребовал для кода в этом ответе, состоит в том, что в нем есть удобное место для размещения полезного комментария, если он полезен.

...