Конкатенация строк в 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 в критичных скриптах для предсказуемого поведения.
Короткая методология (как подойти к задаче)
- Определите, нужно ли простое склеивание или форматирование. 2. Для простого склеивания используйте += или смежную запись. 3. Для сложного форматирования — printf. 4. Всегда кавычьте результирующие строки при выводе или передаче в другие команды.
Ментальные модели и эвристики
- Представляйте конкатенацию как обычную операцию склеивания: значения просто ставятся рядом.
- Всегда думайте о кавычках — это фильтр от большинства неожиданных проблем.
1-line глоссарий
- Конкатенация: объединение двух или более строк в одну.
Итог
Конкатенация в Bash — простая и гибкая операция. Для большинства задач достаточно += или последовательной записи. Для форматирования и безопасности используйте printf и кавычки. Проверьте скрипты тестами на строки с пробелами и специальными символами и следите за безопасностью при подстановке внешних данных.
Notes: если скрипт обрабатывает пользовательский ввод, избегайте подстановки этого ввода в команды без строгого экранирования.
Похожие материалы
Как устроить идеальную вечеринку для просмотра ТВ
Как распаковать несколько RAR‑файлов сразу
Приватный просмотр в Linux: как и зачем
Windows 11 не видит iPod — способы исправить
PS5: как настроить игровые пресеты