Операторы сравнения и выражения Bash

11

Я новичок в программировании bash. Я читал два хороших, длинных гида, но они путались в голове о операторах и ключевых словах.

Что более широко и широко используется? Я не знаю, когда использовать, что и почему.

  1. test , [[ ]] или [ ] или даже (( ))
  2. $((exp)) или $[exp]
  3. -gt или > , ge или >= и т. д.
  4. , когда нужно использовать < и > или ( ) , и когда нам нужно сбежать с \: \< \( и т. д.
  5. == или = (сравнение строк)

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

Заранее благодарю

    
задан MikeD 27.03.2013 в 18:27
источник

1 ответ

5
  • test - это встроенная оболочка, которая (очевидно) проверяет некоторое заданное условие. Для некоторых старых оболочек требуется специальная команда. Таким образом, вы найдете также программу на /usr/bin/test .
  • [ также является программой для проверки некоторых условий. Это программное обеспечение также нуждается в закрывающей скобке, и вы можете найти его в /usr/bin/[ .
  • [[…]] является альтернативой test и [ . Он был разработан для оболочки Korn ( ksh ). Но вы также найдете его в версиях Bash больше 2 и в Z Shell. В двойных скобках есть несколько отличных функций:
    • В оболочке нет разбиения слов или расширения имени файла.
    • Вам не нужно указывать.
    • Вместо -a (AND) или -o (OR) вы можете использовать && или || .
    • = может сделать намного больше.
  • ((…)) эквивалентно let . Таким образом, в основном ((expression)) совпадает с let "expression" . Однако с let вы можете использовать более одного выражения, но двойные фигурные скобки допускают только одно выражение.
  • $((…)) (а также $[…] ) выполняет некоторые вычисления. Оболочка пытается вычислить выражение внутри фигурных скобок и заменяет выражение результатом. Таким образом, echo $((1+1)) приводит к echo 2 . Таким образом, ваши оболочки печатают номер 2.

Каждый раз, когда вы хотите сравнить два числа, вы должны использовать опцию с тире и двумя буквами ( -ge , -lt и т. д.). Если вы хотите сравнить строки, вы должны использовать = или != .

Твой вопрос об экранировании довольно сложно ответить. Потому что это зависит от программного обеспечения, которое вы используете помимо оболочки. Таким образом, grep и grep -E нуждаются в различном экранировании. Это также относится к sed , awk и другим. Поэтому лучший вариант - взглянуть на man-страницу. Через некоторое время вы привыкли и знаете, когда использовать экранирование.

    
ответ дан qbi 29.03.2013 в 21:05