Гид по технологиям

Конкатенация строк в Bash — примеры и советы

4 min read Bash Обновлено 24 Nov 2025
Конкатенация строк в Bash — примеры и советы
Конкатенация строк в Bash — примеры и советы

рабочая станция с кодом на экране

Конкатенация — процесс объединения двух или более значений в одно. В программировании это обычно означает склеивание строк. В Bash это простая и часто используемая операция: Bash трактует значения как строки по умолчанию, поэтому проблем с типами обычно не возникает.

Ниже показаны основные подходы, советы по безопасности, типичные ошибки и проверочные тесты.

Основные способы объединения строк

1) Оператор +=

Самый прямой способ — добавить к существующей переменной другую строку с помощью +=.

#!/usr/bin/env bash

s="Hello"
s+=" World, from MUO"
echo "$s"

Ожидаемый вывод:

Hello World, from MUO

пример конкатенации с оператором += в терминале

Если нужно объединить две переменные, просто добавьте вторую переменную:

#!/usr/bin/env bash

s="Merry"
d=" Christmas"
s+=$d
echo "$s"

Вывод:

Merry Christmas

2) Последовательная запись (смежные переменные)

Более простая форма — записать переменные подряд при расширении или в echo. Это самый наглядный способ.

#!/usr/bin/env bash

s="Manchester"
b="City"
echo "$s $b"

Вывод:

Manchester City

Параметрическое расширение позволяет вставлять переменные внутрь литералов:

#!/usr/bin/env bash

s="Manchester City"
c="Erling Haaland plays in ${s}"
echo "$c"

Вывод:

Erling Haaland plays in Manchester City

соединение литералов и переменных в примере

3) Соединение строк и чисел

Bash не проверяет типы для простых операций со строками, поэтому можно прямо добавлять числа:

#!/usr/bin/env bash

a="Hundred is "
a+=100
echo "$a"

Вывод:

Hundred is 100

4) Форматирование с printf

printf удобен, когда нужно контролировать формат (отступы, выравнивание, специфичные преобразования):

#!/usr/bin/env bash

name="Alice"
greeting=$(printf "%s, %s!" "Hello" "$name")
echo "$greeting"

Вывод:

Hello, Alice!

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

Частые ошибки и когда методы не подходят

  • Неправильное использование кавычек. echo $var без кавычек приводит к разбиению по IFS и потере пробелов.
  • Неинициализированные переменные: s+=$d при unset s будет работать, но лучше инициализировать явно.
  • Если переменная содержит специальные символы (новые строки, знаки доллара, обратные кавычки), не забывайте экранировать или использовать printf.
  • Для бинарных данных или больших объёмов текстов лучше использовать файловые операции, а не конкатенацию в памяти.

Important: всегда оборачивайте расширения переменных в двойные кавычки при выводе или при присвоении, чтобы сохранить пробелы и спецсимволы: echo “$s”.

Альтернативные подходы и полезные приёмы

  • Команда printf — для форматированного вывода и избежания неожиданных подстановок.
  • Использование массивов для безопасного объединения слов и последующего join через IFS:
#!/usr/bin/env bash

parts=("one" "two three" "four")
( IFS=","; echo "${parts[*]}" )
  • Хранить шаблоны в here-doc или файлах и подставлять переменные через envsubst, если требуется шаблонизация.

Проверочные тесты и критерии приёмки

Критерии приёмки:

  • Скрипт корректно выводит ожидаемые строки для трёх тестовых случаев: простая конкатенация, конкатенация с пробелами и с числом.
  • Параметры с пробелами выводятся без усечения (проверить echo “$var”).
  • Нет выполнения произвольного кода при подстановке значений, содержащих символы командной подстановки.

Минимальные тесты (пример):

  • Вход: s=”Hi”; s+=” there” → Ожидается “Hi there”.
  • Вход: s=”a b”; echo $s → Ожидается “a b” при echo “$s”, но “a b” при echo $s может превратиться в два слова.
  • Вход: a=”Hundred is “; a+=100 → “Hundred is 100”.

Чек-лист для разработчика и администратора

Разработчик:

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

Системный администратор:

  • Проверить скрипты на наличие вставки пользовательских данных в команды shell.
  • Добавить set -euo pipefail в критичных скриптах для предсказуемого поведения.

Короткая методология (как подойти к задаче)

  1. Определите, нужно ли простое склеивание или форматирование. 2. Для простого склеивания используйте += или смежную запись. 3. Для сложного форматирования — printf. 4. Всегда кавычьте результирующие строки при выводе или передаче в другие команды.

Ментальные модели и эвристики

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

1-line глоссарий

  • Конкатенация: объединение двух или более строк в одну.

Итог

Конкатенация в Bash — простая и гибкая операция. Для большинства задач достаточно += или последовательной записи. Для форматирования и безопасности используйте printf и кавычки. Проверьте скрипты тестами на строки с пробелами и специальными символами и следите за безопасностью при подстановке внешних данных.

Notes: если скрипт обрабатывает пользовательский ввод, избегайте подстановки этого ввода в команды без строгого экранирования.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство