Как сравнивать строки в Bash

Bash Сравнение строк

При написании Bash-скриптов вам часто приходится сравнивать две строки на предмет их равенства. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.

В этом руководстве описывается, как сравнивать строки в Bash.

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

Операторы сравнения — это операторы, которые сравнивают значения и возвращают значение «истина» или «ложь». При сравнении строк в Bash можно использовать следующие операторы:

  • string1 = string2 и string1 == string2 — оператор равенства возвращает true, если операнды равны.
    • Используйте оператор = с командой test [ .
    • Используйте оператор == с командой [[ для сопоставления с шаблоном.
  • string1 != string2 — оператор неравенства возвращает true, если операнды не равны.
  • string1 =~ regex — Оператор regex возвращает true, если левый операнд соответствует расширенному регулярному выражению справа.
  • string1 > string2 — оператор «больше» возвращает значение true, если левый операнд больше правого, отсортированного в лексикографическом (алфавитном) порядке.
  • string1 < string2 — оператор «меньше» возвращает true, если правый операнд больше правого, отсортированного в лексикографическом (алфавитном) порядке.
  • -z string — True, если длина строки равна нулю.
  • -n string — True, если длина строки не равна нулю.

Ниже приведены несколько моментов, которые следует учитывать при сравнении строк:

  • Между бинарным оператором и операндами необходимо использовать пробел.
  • Всегда заключайте имена переменных в двойные кавычки, чтобы избежать проблем с разделением слов или подстановкой.
  • Bash не разделяет переменные по «типу», переменные рассматриваются как целые числа или строки в зависимости от контекста.

Проверить, равны ли две строки

В большинстве случаев при сравнении строк вам захочется проверить, равны ли строки или нет.

Следующий скрипт использует оператор if и команду test [ для проверки равенства строк с помощью оператора = :

 #!/bin/bash VAR1 = "Linuxize" VAR2 = "Linuxize" if [ " $VAR1 " = " $VAR2 " ] ; then echo "Strings are equal." else echo "Strings are not equal." fi

После выполнения скрипта будет выведен следующий результат.

 Strings are equal.

Вот ещё один скрипт, который принимает ввод пользователя и сравнивает заданные строки. В этом примере мы будем использовать команду [[ и оператор == .

 #!/bin/bash read -p "Enter first string: " VAR1 read -p "Enter second string: " VAR2 if [[ " $VAR1 " == " $VAR2 " ]] ; then echo "Strings are equal." else echo "Strings are not equal." fi

Запустите скрипт и введите строки при появлении соответствующего запроса:

 Enter first string: Linuxize Enter second string: Ubuntu Strings are not equal.

Для сравнения строк также можно использовать логические операторы && и || :

 [[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
 Not equal

Проверить, содержит ли строка подстроку

Существует несколько способов проверить, содержит ли строка подстроку.

Один из подходов — заключить подстроку в символы звездочки * , что означает совпадение всех символов.

 #!/bin/bash VAR = 'GNU/Linux is an operating system' if [[ $VAR == * "Linux" * ]] ; then echo "It's there." fi

Скрипт отобразит следующее:

 It's there.

Другой вариант — использовать оператор регулярного выражения =~ как показано ниже:

 #!/bin/bash VAR = 'GNU/Linux is an operating system' if [[ $VAR = ~ .*Linux.* ]] ; then echo "It's there." fi

Точка, за которой следует звездочка .* соответствует нулю или более вхождений любого символа, кроме символа новой строки.

Проверить, является ли строка пустой

Довольно часто вам также потребуется проверить, является ли переменная пустой строкой. Это можно сделать с помощью операторов -n и -z .

 #!/bin/bash VAR = '' if [[ -z $VAR ]] ; then echo "String is empty." fi
 String is empty.
 #!/bin/bash VAR = 'Linuxize' if [[ -n $VAR ]] ; then echo "String is not empty." fi
 String is not empty.

Сравнение строк с помощью оператора Case

Вместо использования тестовых операторов вы также можете использовать оператор case для сравнения строк:

 #!/bin/bash VAR = "Arch Linux" case $VAR in "Arch Linux" ) echo -n "Linuxize matched" ;;  Fedora | CentOS ) echo -n "Red Hat" ;; esac
 Linuxize matched.

Лексикографическое сравнение

Лексикографическое сравнение — это операция, при которой две строки сравниваются в алфавитном порядке путём последовательного сравнения символов в строке слева направо. Этот вид сравнения используется редко.

Следующие скрипты сравнивают две строки лексикографически:

 #!/bin/bash VAR1 = "Linuxize" VAR2 = "Ubuntu" if [[ " $VAR1 " > " $VAR2 " ]] ; then echo " ${ VAR1 } is lexicographically greater then ${ VAR2 } ." elif [[ " $VAR1 " < " $VAR2 " ]] ; then echo " ${ VAR2 } is lexicographically greater than ${ VAR1 } ." else echo "Strings are equal" fi

Скрипт выведет следующее:

 Ubuntu is lexicographically greater than Linuxize.

Заключение

Сравнение строк — одна из самых базовых и часто используемых операций в скриптах Bash. После прочтения этого руководства вы будете хорошо понимать, как сравнивать строки в Bash. Вы также можете ознакомиться с нашим руководством по конкатенации строк .

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

терминал bash

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *