- How to Concatenate Strings in Bash
- Assigning concatenated strings
- Append to string in bash
- Concatenate numbers and strings
- Nested concatenation of strings
- Работа со строками в bash
- Строковые переменные в Bash
- Конкатенация двух строк в Bash
- Добавление строки к переменной в Bash
- Сравнение двух строк в Bash
- Получить длину строки в Bash
- Удаление символа переноса строки в Bash
- Обрезание пробелов вначале и конце строки в Bash
- Удаление префикса, суффикса или любой подстроки из строки в Bash
- Проверьте, начинается ли строка с подстроки в Bash
- Проверить заканчивается ли строка подстрокой в Bash
- Проверка соответствия строки регулярному выражению в Bash
- Разделить строку в Bash
- Замена строки на другую строку в Bash
- Удаление всего текста после символа в Bash
- Удаление всего текста перед символом в Bash
- Похожие записи:
How to Concatenate Strings in Bash
Learn to concatenate strings in bash shell scripts. You’ll also learn to append to existing strings and combine strings and integers.
Concatenating strings can be an important part of using any programming language for practical applications.
You can concatenate strings in bash as well. There is no concatenation operator here. Just write the strings one after another to join strings in Bash.
Don’t worry! I’ll show you various actual examples to concatenate strings in bash.
Assigning concatenated strings
There are no data types in Bash like you have in most programming languages. But you can still declare variables in Bash.
You can use printf command to print the value of this string variable:
Let’s create some more strings:
[email protected]:~$ t='To' [email protected]:~$ l='Linux' [email protected]:~$ h='Handbook!'
I want to combine all these string variables into a single one. How to do that?
In this manner, I have concatenated all four strings into a single variable and named it tony . Do note that I have added a space between the variables.
Let’s quickly confirm that the strings have been combined:
[email protected]:~$ printf "$tony\n" Welcome To Linux Handbook!
Here’s all of it in a Bash Script:
#!/bin/bash w='Welcome' t='To' l='Linux' h='Handbook' tony="$ $ $ $" printf "$\n"
Make it executable and run it as a script:
[email protected]:~$ chmod +x concat.sh [email protected]:~$ ./concat.sh Welcome To Linux Handbook!
The curly braces <> around the variable names are not mandatory while concatenating strings. However, to make things clear and protect it from surrounding characters, it is good practice to wrap them in <>.
Append to string in bash
The above example combines different strings into one.
Let’s take another scenario. Say, you want to append to an already existing string. How to do that? You use the wonderful += operator.
Can you guess the new value of str ? Yes! It is ironman .
[email protected]:~$ str="iron" [email protected]:~$ str+="man" [email protected]:~$ echo $str ironman
This is helpful when you are using loops in bash. Take this for loop for example:
#!/bin/bash var="" for color in 'Black' 'White' 'Brown' 'Yellow'; do var+="$ " done echo "$var"
If you run the above script, it will append to the string after each iteration.
Concatenate numbers and strings
As I mentioned previously, there are no data types in Bash. Strings and integers are the same and hence they can be easily joined in a single string.
Let us look at another example through a second script. This time, I’ll use a number:
#!/bin/bash we='We' lv='Love' y='You' morgan=3000 stark="$ $ $ $. " printf "$\n"
[email protected]:~$ chmod +x morgan.sh [email protected]:~$ ./morgan.sh We Love You 3000.
Nested concatenation of strings
You can also store those two concatenated strings inside a third one through nested concatenation:
#!/bin/bash w='Welcome' t='To' l='Linux' h='Handbook' tony="$ $ $ $" we='We' lv='Love' y='You' morgan=3000 stark="$ $ $ $. " ironman="$..$" printf "$ Forever!\n"
When you run this shell script, you’ll see this output:
Welcome To Linux Handbook..We Love You 3000. Forever!
I hope this quick little tutorial helped you in concatenating bash strings. If you have questions or suggestions, feel free to leave a comment below.
Работа со строками в bash
Все переменные bash по умолчанию рассматриваются как символьные строки. Поэтому во время работы над сценарием bash придется манипулировать строковыми переменными различными способами.
Строковые переменные в Bash
Важный момент: при работе со строковыми переменными рекомендуется заключать их в двойные кавычки (например, «$var1»). Это связано с тем, что bash может применить разделение слов при расширении переменной, если она не заключена в кавычки. Если строка, хранящаяся в переменной без кавычек, содержит пробелы, строка может быть разделена пробелами и рассматриваться как несколько строк, в зависимости от контекста (например, когда строковая переменная используется в качестве аргумента функции).
Конкатенация двух строк в Bash
В bash нет специального оператора, объединяющего две строки. Чтобы объединить две строковые переменные в bash, необходимо просто поместить одну переменную за другой без какого-либо специального оператора между ними.
Если необходимо объединить строковую переменную со строковым литералом, вам нужно заключить переменную в фигурные скобки <>, чтобы отличить имя переменной от последующего строкового литерала.
HOST=http://example.com URI="/list/" ID=128 url1="$HOST$URI$ID" # конкатенировать строковые переменные url2="$HOST$URI$/feed" # объединить строковую переменную со строковым литералом echo "URL1: $url1" echo "URL2: $url2"
URL1: http://example.com/list/128 URL2: http://example.com/list/128/feed
Добавление строки к переменной в Bash
Этот сценарий аналогичен конкатенации строк. Более простой способ — использовать встроенный оператор +=. При использовании со строковыми операндами оператор += добавляет строку к переменной, как показано ниже.
var1="Linux" var2="!" var1+=" the best" # добавить строковый литерал var1+="$var2" # добавить строковую переменную echo $var1
Сравнение двух строк в Bash
Для сравнения используются операторы ‘==’ или ‘!=’ для проверки равенства или неравенства двух строк (или строковых переменных) в bash. Если использовать одинарные скобки в условии, возможно так же использовать ‘=’ в качестве оператора равенства. Но оператор ‘=’ не допускается внутри двойных круглых скобок.
# Все следующие форматы являются допустимыми. if [ "$var1" == "demo" ]; then echo "Это хорошо" fi if [ "$var1" = "demo" ]; then echo "Это хорошо" fi if [ "$var1" != "$var2" ]; then echo "Это плохо" fi if (( "$var1" == "demo" )); then echo "Это нормально" fi
Получить длину строки в Bash
Существует несколько способов подсчета длины строки в bash. Можно использовать wc или awk для получения информации о длине строки, но нет необходимости использовать внешний инструмент для такой простой задачи. В следующем примере показано, как найти длину строки с помощью встроенного механизма bash.
str_var="Это пример строки" len=$ len=$(expr length "$str_var")
Удаление символа переноса строки в Bash
Если необходимо удалить из строки символ новой строки или переноса каретки, можно использовать расширение параметров bash в следующем виде:
Это выражение подразумевает, что если «строка» содержит символ в конце, хранящийся в «var», то результатом выражения станет «строка» без этого символа. Например:
# входная строка с завершающим символом новой строки input_line=$'Это примерная строка\n' # определите символ конца строки. Для возврата каретки замените его на $'\r' character=$'\n' echo -e "($input_line)" # удалить символ новой строки input_line=$ echo -e "($input_line)"
Обрезание пробелов вначале и конце строки в Bash
Удалить из строки символы пробела в начале или в конце строки возможно с использованием команды sed.
var_str=" Это пример строки " # исходная строка с пробелами echo -e "($var_str)" # обрезать пробелмы вначале строки var_str=$(echo "$var_str" | sed -e "s/^[[:space:]]*//") echo -e "($var_str)" # обрезать пробелы в конце строки var_str=$(echo "$var_str" | sed -e "s/[[:space:]]*$//") echo -e "($var_str)"
Для упрощения аналогичных задач, возможно использовать функцию bash
trim() < local var="$*" # удаляем пробелы var="$">" # удалить прбелы в конце строки var="$">" echo "$var" > my_str=" Это пример строки " echo "($my_str)" my_str=$(trim $my_str) echo "($my_str)"
Удаление префикса, суффикса или любой подстроки из строки в Bash
Команда sed позволяет удалять любую подстроку из строки. Пример ниже показывает, как можно удалить префикс, суффикс или все вхождения подстроки из строковой переменной.
Если подстрока содержит какой-либо специальный символ (например, ‘[‘ и ‘]’ в данном примере), то в sed его необходимо экранировать с помощью ‘\’.
var_str="[DEBUG] Device0 is not a valid input [EOL]" prefix="\[DEBUG\]" suffix="\[EOL\]" substring="valid" echo "$var_str" # удалить префикс из строки var_str=$(echo "$var_str" | sed -e "s/^$prefix//") echo "$var_str" # удалить суффикс из строки var_str=$(echo "$var_str" | sed -e "s/$suffix$//") echo "$var_str" # удалить подстроку из строки var_str=$(echo "$var_str" | sed -e "s/$substring//") echo "$var_str"
Другой способ удалить префикс или суффикс из строки — использовать встроенный в bash механизм сопоставления с образцом. В этом случае специальный символ не нужно экранировать.
var_str="[DEBUG] Device0 is not a valid input [EOL]" prefix="[DEBUG]" suffix="[EOL]" # удалите префиксную строку var_str=$ echo "$var_str" # удалить суффиксную строку var_str=$ echo "$var_str"
Проверьте, начинается ли строка с подстроки в Bash
Если необходимо проверить, начинается ли строковая переменная с префикса, существует несколько способов сделать это, как показано ниже.
var1="Этот текст" prefix="Это" case $var1 in $prefix*) echo "1. \"$var1\" начинается с \"$prefix\"" esac if [[ $var1 =~ ^$prefix ]]; then echo "2. \"$var1\" начинается с \"$prefix\"" fi if [[ $var1 == $prefix* ]]; then echo "3. \"$var1\" начинается с \"$prefix\"" fi if [[ $var1 == This* ]]; then echo "4. \"$var1\" начинается с \"This\"" fi
Проверить заканчивается ли строка подстрокой в Bash
Проверить заканчивается ли строка определенным суффиксом или нет, можно использовать один из методов, показанных ниже.
var1="Этот текст" suffix="текст" case $var1 in *$suffix) echo "1. \"$var1\" заканчивается на \"$suffix\"" esac if [[ $var1 =~ $suffix$ ]]; then echo "2. \"$var1\" заканчивается на \"$suffix\"" fi if [[ $var1 == *$suffix ]]; then echo "3. \"$var1\" заканчивается на \"$suffix\"" fi if [[ $var1 == *text ]]; then echo "4. \"$var1\" заканчивается на \"text\"" fi
Проверка соответствия строки регулярному выражению в Bash
В bash можно проверить, содержит ли строка подстроку, совпадающую с регулярным выражением. Как частный случай, еще проще проверить, содержит ли строка фиксированную подстроку.
pattern="длину \s+8+" # регулярное выражение для подстроки var1="Эти данные имеют длину 1000" var2="Эти данные не действительны" if [[ $var1 =~ $pattern ]]; then echo "$var1: длина найдена" else echo "$var1: длина не найдена" fi if [[ $var2 =~ $pattern ]]; then echo "$var2: длина найдена" else echo "$var2: длина не найдена" fi
Разделить строку в Bash
Для разделения строки в bash используется команда read, которая считывает одну строку строки из stdin и разделяет строку по разделителю. Разделенные элементы затем сохраняются либо в массиве, либо в отдельных переменных, переданных командой read. По умолчанию разделителем являются символы ‘ ‘, ‘\t’, ‘\r’, ‘\n’. Необходимо разделить строку по собственному символу, можно указать разделитель в переменной IFS перед вызовом команды read.
# строки для разделения var1="зеленый оранжевый черный фиолетовый" var2="зеленый:оранжевый:черный:фиолетовый" # разделить строку на один или несколько пробелов и сохранить результат в массиве read -a my_array "; do echo $elem done # разделить строку с помощью пользовательского разделителя IFS=':' read -a my_array2 "; do echo $elem done
Замена строки на другую строку в Bash
Если необходимо заменить строку на другую строку в bash, можно использовать функцию расширения параметров bash.
var1="Это очень плохая строка" substring="плохая" # заменяемая строка replacement="хорошая" # заменяемая строка var2="$" echo $var2
Удаление всего текста после символа в Bash
Если необходимо удалить из строки весь текст, который появляется после определенного символа, вместе с самим символом. В этом случае можно использовать расширение параметров bash в следующем формате:
Приведенное выше выражение означает, что если «слово» совпадает частью «строки», то результатом этого выражения станет «строка» без совпавшего шаблона. Например:
url="http://example.com:1234" delimeter=":" # удалите весь текст, начиная с разделителя result=$ echo $result
Удаление всего текста перед символом в Bash
Если необходимо удалить все, что предшествует и включает определенный символ. Следующая форма расширения параметров bash позволяет это сделать:
Приведенное выше выражение означает, что если «строка» содержит текст, заканчивающийся на «слово», то результатом этого выражения станет «строка» без (самого длинного) совпадающего шаблона. Самый длинный совпадающий шаблон означает, что если «строка» содержит несколько экземпляров «слова», то совпадающий шаблон должен содержать их все. Например:
# удалите весь текст, предшествующий и включающий символ разделитель url="http://example.com:1234" delimeter=":" result=$ echo $result
В приведенном выше примере исходная строка содержит два два разделителя ‘:’. Поскольку мы используем самый длинный шаблон, совпадающим содержимым является «http://example.com:», а не «http:», и, следовательно, результат («1234») — это то, что остается после удаления совпадающего содержимого.