Работа со строками в bash

Все переменные bash по умолчанию рассматриваются как символьные строки. Поэтому во время работы над сценарием bash придется манипулировать строковыми переменными различными способами.

Строковые переменные в Bash

Важный момент: при работе со строковыми переменными рекомендуется заключать их в двойные кавычки (например, "$var1"). Это связано с тем, что bash может применить разделение слов при расширении переменной, если она не заключена в кавычки. Если строка, хранящаяся в переменной без кавычек, содержит пробелы, строка может быть разделена пробелами и рассматриваться как несколько строк, в зависимости от контекста (например, когда строковая переменная используется в качестве аргумента функции).

Конкатенация двух строк в Bash

В bash нет специального оператора, объединяющего две строки. Чтобы объединить две строковые переменные в bash, необходимо просто поместить одну переменную за другой без какого-либо специального оператора между ними.

Если необходимо объединить строковую переменную со строковым литералом, вам нужно заключить переменную в фигурные скобки {}, чтобы отличить имя переменной от последующего строкового литерала.

В результате получим:

Добавление строки к переменной в Bash

Этот сценарий аналогичен конкатенации строк. Более простой способ - использовать встроенный оператор +=. При использовании со строковыми операндами оператор += добавляет строку к переменной, как показано ниже.

В результате мы получим:

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

Для сравнения используются операторы  '==' или '!=' для проверки равенства или неравенства двух строк (или строковых переменных) в bash. Если использовать одинарные скобки в условии, возможно так же использовать '=' в качестве оператора равенства. Но оператор '=' не допускается внутри двойных круглых скобок.

Получить длину строки в Bash

Существует несколько способов подсчета длины строки в bash. Можно использовать wc или awk для получения информации о длине строки, но нет необходимости использовать внешний инструмент для такой простой задачи. В следующем примере показано, как найти длину строки с помощью встроенного механизма bash.

Удаление символа переноса строки в Bash

Если необходимо  удалить из строки символ новой строки или переноса каретки, можно использовать расширение параметров bash в следующем виде:

Это выражение подразумевает, что если "строка" содержит символ в конце, хранящийся в "var", то результатом выражения станет "строка" без этого символа. Например:

Обрезание пробелов вначале и конце строки в Bash

Удалить из строки символы пробела в начале или в конце строки возможно с использованием команды sed.

Для упрощения аналогичных задач, возможно использовать функцию bash

Удаление префикса, суффикса или любой подстроки из строки в Bash

Команда sed позволяет удалять любую подстроку из строки. Пример ниже показывает, как можно удалить префикс, суффикс или все вхождения подстроки из строковой переменной.

Если подстрока содержит какой-либо специальный символ (например, '[' и ']' в данном примере), то в sed его необходимо экранировать с помощью '\'.

Другой способ удалить префикс или суффикс из строки - использовать встроенный в bash механизм сопоставления с образцом. В этом случае специальный символ не нужно экранировать.

Проверьте, начинается ли строка с подстроки в Bash

Если необходимо проверить, начинается ли строковая переменная с префикса, существует несколько способов сделать это, как показано ниже.

Проверить заканчивается ли строка подстрокой в Bash

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

Проверка соответствия строки регулярному выражению в Bash

В bash можно проверить, содержит ли строка подстроку, совпадающую с регулярным выражением. Как частный случай, еще проще проверить, содержит ли строка фиксированную подстроку.

Разделить строку в Bash

Для разделения строки в bash используется команда read, которая считывает одну строку строки из stdin и разделяет строку по разделителю. Разделенные элементы затем сохраняются либо в массиве, либо в отдельных переменных, переданных командой read. По умолчанию разделителем являются символы ' ', '\t', '\r', '\n'. Необходимо разделить строку по собственному символу, можно указать разделитель в переменной IFS перед вызовом команды read.

Замена строки на другую строку в Bash

Если необходимо заменить строку на другую строку в bash, можно использовать функцию расширения параметров bash.

Удаление всего текста после символа в Bash

Если необходимо удалить из строки весь текст, который появляется после определенного символа, вместе с самим символом. В этом случае можно использовать расширение параметров bash в следующем формате:

Приведенное выше выражение означает, что если "слово" совпадает частью "строки", то результатом этого выражения станет "строка" без совпавшего шаблона. Например:

в результате получим

Удаление всего текста перед символом в Bash

Если необходимо удалить все, что предшествует и включает определенный символ. Следующая форма расширения параметров bash позволяет это сделать:

Приведенное выше выражение означает, что если "строка" содержит текст, заканчивающийся на "слово", то результатом этого выражения станет "строка" без (самого длинного) совпадающего шаблона. Самый длинный совпадающий шаблон означает, что если "строка" содержит несколько экземпляров "слова", то совпадающий шаблон должен содержать их все. Например:

Результатом будем:

В приведенном выше примере исходная строка содержит два два разделителя ':'. Поскольку мы используем самый длинный шаблон, совпадающим содержимым является "http://example.com:", а не "http:", и, следовательно, результат ("1234") - это то, что остается после удаления совпадающего содержимого.

Понравилась статья? Поделиться с друзьями:
Комментарии: 2
  1. Avatar for Андрей
    Андрей

    Проверить заканчивается ли строка подстрокой в Bash
    if [[ $var1 == *$suffix]]; then
    echo "3. \"$var1\" заканчивается на \"$suffix\""
    ошибка - правая двойная скобка - нет пробела

    1. Avatar for Gnostis
      Gnostis (автор)

      Спасибо, поправил!

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