как проверить что строка не пустая bash
Как определить, пуста ли переменная bash?
Каков наилучший способ определить, является ли переменная в bash пустой («»)?
Я слышал, что мне рекомендуется if [ «x$variable» = «x» ]
Это правильный способ? (должно быть что-то более прямолинейное)
12 ответов
Это вернет true, если переменная не установлена или установлена в пустую строку («»).
В Bash, когда вы не занимаетесь переносимостью оболочек, которые его не поддерживают, вы всегда должны использовать синтаксис с двойной скобкой:
Любое из следующего:
В Bash, используя двойные квадратные скобки, цитаты не нужны. Вы можете упростить тест для переменной, в которой содержит значение:
Этот синтаксис совместим с ksh (по крайней мере, ksh93, во всяком случае). Он не работает в чистых POSIX или более старых оболочках Bourne, таких как sh или тире.
См. мой ответ здесь и BashFAQ /031 для получения дополнительной информации о различиях между двойными и одиночными квадратными скобками.
Вы можете проверить, не изменилась ли переменная (в отличие от пустой строки):
Если вы хотите узнать, является ли переменная нулевой, но не отменяется:
Переменная в bash (и любая совместимая с POSIX оболочка) может находиться в одном из трех состояний:
В большинстве случаев вам нужно только знать, установлена ли переменная в непустую строку, но иногда важно различать unset и задавать пустую строку.
Ниже приведены примеры того, как вы можете тестировать различные возможности, и работает в bash или любой совместимой с POSIX оболочке:
Вот то же самое, но в удобной форме таблицы:
Другими параметрами, которые я использовал, является установка переменной, но ее можно переопределить другой переменной, например
Примечание: это оставит вашу переменную undef.
В соответствии с руководством по php :
переменная считается пустым, если он не существует или его значение является одним из следующих:
Конечно, случаи null и false не могут быть преобразованы в bash, поэтому они опущены.
Демо-версия:
следующий фрагмент:
Сказав, что в логике bash проверки на ноль в этой функции могут вызвать побочные проблемы imho, любой, кто использует эту функцию, должен оценить этот риск и, возможно, решит сократить эти проверки, оставив только первый.
Сравнение строк в Bash
При написании сценариев на Bash не только опытные программисты, но и новички в области командного интерпретатора Bash сталкиваются с работой со строками. Наиболее часто это необходимо при считывании команд, вводимых пользователем в качестве аргументов для исполняемого сценария, а также при обработке текстовых файлов. И один из необходимых приёмов в таком случае — это сравнение строк.
В данной статье будет рассмотрено сравнение строк Bash, а также некоторые нюансы по использованию операций сравнения и решению часто встречающихся ошибок.
Сравнение строк Bash
Данные операции позволяют определить, являются ли сравниваемые строки одинаковыми:
Результат работы сценария:
При проверке на равенство с помощью команды test (синоним квадратным скобкам [ ]) учитываются все пунктуационные знаки и различия в регистре букв сравниваемых строк.
Некоторые особенности сравнения строк с шаблонами:
Например проверка строки bash на то, начинается ли она с символа y:
Результат выполнения кода:
Сценарий вывел 0 (ноль), так как мы потребовали вывести код ошибки последней выполненной инструкции. А код 0 означает, что сценарий выполнился без ошибок. И действительно — переменная $x содержит строку yandex, которая начинается с символа «y». В противном случае может писаться «1». Это довольно удобный способ отладки сценариев.
Сравнение строк по алфавиту на Bash
Задача усложняется при попытке определить, является ли строка предшественницей другой строки в последовательности сортировки по возрастанию. Люди, пишущие сценарии на языке командного интерпретатора bash, нередко сталкиваются с двумя проблемами, касающимися операций «больше» и «меньше» относительно сравнения строк Linux, у которых достаточно простые решения:
Во-первых, символы «больше» и «меньше» нужно экранировать, добавив перед ними обратный слэш (\), потому что в противном случае в командном интерпретаторе они будут расцениваться как символы перенаправления, а строки — как имена файлов. Это один из тех случаев, когда отследить ошибку достаточно сложно.
Что получится, если сравнить строки bash:
Как видно, один лишь символ «больше» в своём непосредственном виде привёл к неправильным результатам, хотя и не было сформировано никаких ошибок. В данном случае этот символ привёл к перенаправлению потока вывода, поэтому никаких синтаксических ошибок не было обнаружено и, как результат, был создан файл с именем hockey:
Для устранения этой ошибки нужно экранировать символ «>», чтобы условие выглядело следующим образом:
Тогда результат работы программы будет правильным:
Во-вторых, упорядочиваемые с помощью операторов «больше» и «меньше» строки располагаются иначе, чем это происходит с командой sort. Здесь проблемы сложнее поддаются распознаванию, и с ними вообще можно не столкнуться, если при сравнении не будет учитываться регистр букв. В команде sort и test сравнение происходит по разному:
Результат работы кода:
В команде test строки с прописными буквами вначале будут предшествовать строкам со строчными буквами. Но если эти же данные записать в файл, к которому потом применить команду sort, то строки со строчными буквами будут идти раньше:
Разница их работы заключается в том, что в test для определения порядка сортировки за основу взято расположение символов по таблице ASCII. В sort же используется порядок сортировки, указанный для параметров языка региональных установок.
Проверка строки на пустое значение
Сравнение с помощью операторов -z и -n применяется для определения наличия содержимого в переменной. Таким образом, вы можете найти пустые строки bash. Пример:
Результат работы кода:
В этом примере создаются две строковые переменные — val1 и val2. Операция -n определяет, имеет ли переменная val1 ненулевую длину, а -z проверяет val2 и val3 на нулевую. Примечательно то, что последняя не была определена до момента сравнения, но интерпретатор считает, что её длина всё же равна нулю. Такой нюанс следует учитывать при различных проверках сценариев. И, если нет уверенности в том, какое значение содержится в переменной и задано ли оно вообще, стоит проверить её с помощью оператора -n или -z и лишь затем использовать по назначению.
Стоит обратить внимание и на функцию -n. Если ей для проверки будет передана необъявленная или пустая переменная, будет возвращена истина, а не ложь. Для таких случаев следует заключать проверяемую строку (переменную) в двойные кавычки, чтобы выглядело это так:
Выводы
В представленных операциях сравнения строк Bash есть определённые нюансы, которые стоит понять для предотвращения ошибок работы сценариев. Но таких ситуаций на практике встречает много, поэтому запомнить все (и тем более, описать) не получится.
При сравнении строк в виде переменных их можно заключать в кавычки практически всегда, так как это считается правилом хорошего тона, а заодно и страхует от семантических ошибок.
Как определить, является ли переменная bash пустой?
Каков наилучший способ определить, является ли переменная в bash пустой («»)?
Я слышал, что рекомендуется делать if [ «x$variable» = «x» ]
Это правильный путь? (должно быть что-то более простое)
Это вернет true, если переменная не установлена или установлена в пустую строку («»).
В Bash, когда вас не интересует переносимость в оболочки, которые ее не поддерживают, вы всегда должны использовать синтаксис в двойных скобках:
Любое из следующего:
В Bash, используя двойные квадратные скобки, кавычки не нужны. Вы можете упростить тест для переменной, которая содержит значение для:
Этот синтаксис совместим с ksh (по крайней мере, ksh93, в любом случае). Он не работает в чистых оболочках POSIX или старых Bourne, таких как sh или dash.
Смотрите мой ответ здесь и BashFAQ / 031 для получения дополнительной информации о различиях между двойными и одинарными квадратными скобками.
Вы можете проверить, является ли переменная не установленной (в отличие от пустой строки):
где «х» является произвольным.
Если вы хотите узнать, является ли переменная нулевой, но не не установлена ли она:
Переменная в bash (и любая POSIX-совместимая оболочка) может находиться в одном из трех состояний:
В большинстве случаев вам нужно только знать, установлена ли переменная в непустую строку, но иногда важно различать unset и задавать пустую строку.
Ниже приведены примеры того, как вы можете протестировать различные возможности, и это работает в bash или любой POSIX-совместимой оболочке:
Вот то же самое, но в удобной форме таблицы:
Как сравнивать строки в сценариях Bash Shell в Linux
Главное меню » Операционная система Linux » Как сравнивать строки в сценариях Bash Shell в Linux
Работа со строками является частью любого языка программирования. Скрипты Bash не отличаются. Даже синтаксис почти такой же.
В этой краткой статье мы покажем вам, как сравнивать строки в скриптах оболочки Bash в Linux.
Сравнение строк Bash
Вот как вы сравниваете строки в Bash.
Вы также можете использовать строку напрямую вместо использования переменной.
Позвольте нам показать это вам на примерах.
Проверьте, равны ли две строки
Если вы хотите проверить, равны ли две строки, вот пример:
Проверьте, не равны ли строки в Bash
Вместо того, чтобы проверять качество, давайте сделаем обратное и проверим неравенство. Bash также предоставляет оператор отрицания, так что вы можете легко использовать условие «если не равно» в сценариях оболочки.
Полный пример выглядит так:
Проверьте, является ли строка нулевой или пустой в Bash
В отличие от некоторых других языков, таких как C ++, в Bash вы можете проверить, является ли строка пустой или пустой с помощью одной команды:
-z фактически проверяет, равна ли длина переменной нулю или нет. Если переменная не установлена или если она пустая (равна «»), длина будет равна нулю и, следовательно, условие вернет true.
Полный пример можно увидеть здесь:
Примечание об использовании одинарных скобок ‘[]’ и двойных скобок ‘[[]]’ в скриптах bash
Вы также можете использовать оператор if с двойными скобками, например так:
Одиночная скобка – это старая конвенция Posix, и у нее есть некоторые недостатки. Если вы не используете двойные кавычки вокруг переменных, а переменная не определена, она исчезнет из кода и приведет к синтаксической ошибке.
Заключение
Мы надеемся, что эта небольшая статья помогла вам сравнить строки в скриптах bash. Я также рекомендую прочитать еще одну статью по команде bash sleep.
Если у вас есть вопросы или предложения, не стесняйтесь оставлять комментарии ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как сравнивать строки в Bash
How to Compare Strings in Bash
Это руководство описывает, как сравнивать строки в Bash.
При написании сценариев Bash вам часто нужно сравнивать две строки, чтобы проверить, равны они или нет. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.
Операторы сравнения
Ниже следует отметить несколько моментов при сравнении строк:
Проверьте, равны ли две строки
В большинстве случаев при сравнении строк вы хотите проверить, равны ли строки или нет.
Следующий скрипт использует оператор if и команду test, [ чтобы проверить, совпадают ли строки с = оператором:
Когда скрипт выполняется, он напечатает следующий вывод.
Вот еще один скрипт, который принимает входные данные от пользователя и сравнивает заданные строки. В этом примере мы будем использовать [[ команду и == оператор.
Запустите скрипт и введите строки при появлении запроса:
Вы также можете использовать логические и && и или || для сравнения строк:
Проверьте, содержит ли строка подстроку
Есть несколько способов проверить, содержит ли строка подстроку.
Один из подходов заключается в использовании подстроки с символами звездочки, * что означает совпадение всех символов.
Проверьте, пуста ли строка
Сравнение строк с помощью оператора Case
Вместо использования тестовых операторов вы также можете использовать оператор case для сравнения строк:
Лексикографическое сравнение
Следующие сценарии сравнивают две строки лексикографически:
Скрипт выведет следующее: