
При написании 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. Вы также можете ознакомиться с нашим руководством по конкатенации строк .
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства