Объявление переменных

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

Объявление и присваивание переменных в Bash используют синтаксис name=value без пробелов вокруг =, а встроенная команда declare добавляет атрибуты типа: declare -i n=5 обеспечивает целочисленный тип, declare -r CONST="fixed" делает переменную доступной только для чтения, declare -a arr объявляет индексированный массив, а declare -A map объявляет ассоциативный массив. Bash не выполняет автоматическое преобразование типов — каждая переменная по умолчанию является строкой, — поэтому использование declare -i для целочисленных переменных предотвращает случайную конкатенацию строк в арифметически насыщенных shell-скриптах на Linux. Встроенная команда readonly эквивалентна declare -r и часто используется в начале скриптов автоматизации для защиты констант, таких как пути конфигурации и API-эндпоинты, от случайного переприсваивания. Локальные переменные внутри функций Bash следует объявлять с помощью local name=value (который внутренне использует declare), чтобы не загрязнять глобальную область видимости shell-скриптов. Понимание объявления и присваивания переменных — основа всего написания Bash-скриптов, от простых однострочников командной строки до сложных фреймворков автоматизации 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 кусает).

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

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