Переменные

Тема дорожной карты · Bash

Переменные — основной механизм хранения данных в Bash, содержащий строки, целые числа и массивы, которые управляют логикой и потоком данных в скриптах автоматизации Linux. Переменные в Bash присваиваются без пробелов вокруг знака = (name=value) и используются как $name или ${name} — форма с фигурными скобками предпочтительна, когда имя переменной сразу за ней следует текст, который можно ошибочно принять за часть имени. По умолчанию все переменные Bash являются глобальными и нетипизированными, обрабатываются как строки, если не объявлены с declare -i (целое число) или declare -a (индексированный массив); добавление local внутри функции ограничивает область видимости переменной этой функцией, что является критически важной практикой написания shell-скриптов для избежания конфликтов имён. Переменные окружения, экспортируемые в дочерние процессы с помощью export VAR=value, — это стандартный POSIX-совместимый механизм передачи конфигурации подпроцессам и основа системной конфигурации Linux. Понимание присваивания переменных Bash, области видимости с помощью local и семантики экспорта с помощью export — отправная точка для любого продуктивного написания shell-скриптов и автоматизации Linux.

Как это работает

Переменные: name="value" (без пробелов вокруг =), используются как $name или ${name} (форма с фигурными даёт ${name}_suffix). Локальные в функциях: local x. Read-only: readonly. Экспортируемые (в подпроцессы): export NAME=value. Специальные: $0 (имя скрипта), $1-$9 (позиционные аргументы), $# (количество), $@ (все как отдельные слова), $* (все как одно), $? (последний exit-код), $$ (PID), $! (последний bg PID).

Когда применять

Всегда закавычивайте раскрытие переменных ("$x", не $x) — незакавыченные word-split по whitespace + glob-расширяются, ломаясь на именах файлов с пробелами. ${var:-default} — дефолт, ${var:?error} — требовать значение, ${var:+alt} — "alt, только если var задана". local внутри функций, чтобы не засорять parent-scope. ЗАГЛАВНЫЕ для env-vars + констант, lower для локалов.

Типичные ошибки

Ловушки Переменные: name = "value" с пробелами (парсится как команда); ЗАГЛАВНЫЕ для всего ("коллизии с env-переменными"); не используют local (переменные утекают к caller); echo $foo вместо echo "$foo" (word-splitting кусает).

Связанные понятия

Полезные ресурсы