LINUX.ORG.RU

Условия сравнения в bash, вылезает ошибка

 , , ,


0

1

Из 6 условий сравнения, почему-то 2 не работают (со строками).

В обучающих статьях нигде такой проблемы не рассмотрено.

-eq,(==)  # равно
-ne,(!=)  # неравно
-lt,(< )  # меньше
-le,(<=)  # меньше или равно
-gt,(>)   #больше
-ge,(>=)  #больше или равно

Вот такие знаки принимает: >, <, ==, !=

А такие нет: >=, <=

if [[ strd <= str ]]
./script.sh: строка 3: синтаксическая ошибка в условном выражении
./script.sh: строка 3: синтаксическая ошибка рядом с «str»
./script.sh: строка 3: `if [[ strd <= str ]]'

С чем это связано?

P.S. Попросили добавить этот гайд сюда, видимо хороший.

https://www.tldp.org/LDP/abs/html/abs-guide.html



Последнее исправление: divlns (всего исправлений: 2)
Ответ на: комментарий от anonymous

Это я знаю, какое-то излишнее усложнение синтаксиса на мой взгляд. Но почему конкретно >= и <= со строкой не пашет, вот это непонятно.

divlns
() автор топика
Ответ на: комментарий от anonymous

Я понял, думал что баш из тех языков, которые почти не обновляются (как Си), но видно ошибался. Если эти примеры раньше и работали, то видимо потом эти 2 условия со знаком исключили.

divlns
() автор топика
Ответ на: комментарий от divlns

Правда непонятно почему, чем мешало это условие. Почему кто-то решил, что такое сравнение строк (>=, <=) больше никому не нужно.

divlns
() автор топика
Ответ на: комментарий от divlns

Си обновляется на порядки активней баша если что.

anonymous
()
Ответ на: комментарий от divlns

Сишка в прошлом году ток обновилась, че те еще надо? %)

Deleted
()

Хотя вот у себя вызвал ман баша, там в списке операций сравнения есть >= и <=, почему же тогда не работает?

ARITHMETIC EVALUATION
       The shell allows arithmetic expressions to be evaluated, under certain circumstances (see the  let  and  declare  builtin
       commands,  the  (( compound command, and Arithmetic Expansion).  Evaluation is done in fixed-width integers with no check
       for overflow, though division by 0 is trapped and flagged as an error.  The operators and their  precedence,  associativ‐
       ity,  and  values  are  the  same as in the C language.  The following list of operators is grouped into levels of equal-
       precedence operators.  The levels are listed in order of decreasing precedence.

       id++ id--
              variable post-increment and post-decrement
       ++id --id
              variable pre-increment and pre-decrement
       - +    unary minus and plus
       ! ~    logical and bitwise negation
       **     exponentiation
       * / %  multiplication, division, remainder
       + -    addition, subtraction
       << >>  left and right bitwise shifts
       <= >= < >
              comparison
       == !=  equality and inequality
       &      bitwise AND
       ^      bitwise exclusive OR
       |      bitwise OR
       &&     logical AND
       ||     logical OR
       expr?expr:expr
              conditional operator
       = *= /= %= += -= <<= >>= &= ^= |=
              assignment
       expr1 , expr2
              comma
divlns
() автор топика
Ответ на: комментарий от divlns

ARITHMETIC EVALUATION и [[ – разные вещи, а <= и с числами не работает, потому что у [[ нет поддержки этого оператора (см. CONDITIONAL EXPRESSIONS):

$ [[ 1 <= 2 ]]
bash: syntax error in conditional expression
bash: syntax error near `2'
xaizek ★★★★★
()
Ответ на: комментарий от divlns

думал что баш из тех языков

«Масло масляное». bash - не язык (как это положено), а интерпретатор команд. Разные вещи! И задача у него не проги писать!

zvezdochiot

anonymous
()
Ответ на: комментарий от anonymous

Порой трудно осиливать ман на инглише, хотя обычно я иду туда первым делом, если надо узнать что-то небольшое... А вот за учебник спасибо, буду потихоньку осиливать.

divlns
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.