Поиск по сайту:
Ленивые всегда бывают людьми посредственными (Вольтер).

Использование команды declare в Bash с примерами

27.01.2025
Использование команды declare в Bash с примерами

Команда declare в Bash используется для определения, изменения и отображения переменных и функций. В Bash-скриптах основная цель команды declare — задавать атрибуты для переменных и функций и отображать их текущее состояние.

В этой статье мы научимся использовать команду declare в скриптах Bash на примере Linux.

 

1. Базовое использование команды declare в Bash

1.1. Определите переменную

Команда declare часто используется для определения переменных с определенными атрибутами.

declare my_var="Hello, World!"
echo "$my_var"
Это работает так же, как обычное присвоение переменной (my_var="Hello, World!").

 

1.2. Сделайте переменную заглавной

declare -u upper_var="hello world"
echo "$upper_var"  # Outputs "HELLO WORLD"

 

-u флаг преобразует значение upper_var в верхний регистр.

 

1.3. Сделайте переменную строчной

declare -l lower_var="HELLO WORLD"
echo "$lower_var"  # Outputs "hello world"

 

Флаг -l преобразует значение lower_var в нижний регистр.

 

2. Перечисление переменных и их значений

2.1. Перечислите все переменные

declare -p

 

Здесь показаны все переменные и их значения.

 

2.2. Перечислите конкретную переменную

declare -p my_var

 

Выходной сигнал:

declare -- my_var="Hello, World!"

 

declare -- означает, что это обычная переменная без специальных атрибутов.

 

3. Особые атрибуты с declare

3.1. Сделайте переменную доступной только для чтения (-r)

Установите переменную, доступную только для чтения:

declare -r readonly_var="Fixed Value"
readonly_var="New Value"  # Это вызовет ошибку

 

Флаг -r делает readonly_var доступным только для чтения. Попытка изменить его приведёт к ошибке. После установки его нельзя будет изменить.

 

3.2. Принудительно принять переменную в виде целого числа (-i)

Bash будет обрабатывать переменную как число и выполнять вычисления автоматически.

declare -i num=10
num+=5
echo "$num"  # Вывод: 15

 

Флаг -i делает num целым числом. Если вы присвоите нецелое значение, по умолчанию будет 0 .

Читать  Как перезагрузить Linux с помощью командной строки

Если вы попытаетесь присвоить нечисловое значение, оно будет проигнорировано:

num="hello"
echo "$num"  # It will display 0.

 

3.3. Задайте переменную в виде индексированного массива

declare -a my_array=("apple" "banana" "cherry")

 

-a флаг создает my_array индексированный массив.

Чтобы распечатать весь массив целиком, вы можете использовать:

echo "${my_array[@]}"

 

Пример вывода:

apple banana cherry

 

Для доступа к отдельным элементам из массива:

echo "${my_array[0]}" # Вывод: яблоко
echo "${my_array[1]}" # Вывод: банан
echo "${my_array[2]}" # Вывод: вишня

 

Перебор по массиву:

for item in "${my_array[@]}"; do
    echo "$item"
done

 

Получение длины массива:

echo "${#my_array[@]}" # Вывод: 3

 

Добавление нового элемента:

my_array+=("date")
echo "${my_array[@]}" # Вывод: яблоко банан вишня дата

 

Удаление элемента:

Чтобы удалить второй элемент (banana по индексу 1):

unset my_array[1]
echo "${my_array[@]}" # Вывод: яблоко вишня дата

3.4. Задайте переменную в виде ассоциативного массива (Bash 4+)

declare -A my_assoc_array=([fruit]="apple" [color]="red")

 

В Bash это создаёт ассоциативный массив (также называемый словарём или хэш-картой), в котором ключи (вместо числовых индексов) сопоставляются с определёнными значениями.

-Aфлаг создает my_assoc_array ассоциативный массив (пары ключ-значение).

Доступ к элементам:

echo "${my_assoc_array[fruit]}" # Вывод: яблоко
echo "${my_assoc_array[color]}" # Вывод: красный

 

Печать всех Ключей:

echo "${!my_assoc_array[@]}" # Вывод: цвет плода

 

Печать всех значений:

echo "${my_assoc_array[@]}" # Вывод: яблоко красное

 

Перебор по массиву:

for key in "${!my_assoc_array[@]}"; do
    echo "$key => ${my_assoc_array[$key]}"
done

 

Выходной сигнал:

fruit => apple
color => red

 

Добавление новой пары Ключ-значение:

my_assoc_array[shape] = "circle"; 
echo "${!my_assoc_array[@]}"; # Вывод: цвет плода форма 
echo "${my_assoc_array[shape]}"; # Вывод: круг

 

Извлечение ключа

unset my_assoc_array[цвет]
echo "${!my_assoc_array[@]}" # Вывод: форма плода

 

Проверка наличия Ключа:

if [[ -v my_assoc_array[fruit] ]]; then
    echo "Key 'fruit' exists!"
fi

 

Читать  Exa - Современная замена команды ls

Выходной сигнал:

Key 'fruit' exists!

 

3.5. Экспортировать переменную в подоболочки (-x)

Это делает переменную доступной для дочерних процессов.

declare -x my_env_var="Exported Value"

 

Эта команда создаёт переменную среды (my_env_var) и делает её доступной для дочерних процессов (например, для новой оболочки Bash).

bash -c 'echo "\$my_env_var"' # Вывод: экспортированное значение

 

Что произойдет, если мы не будем использовать declare -x?

my_env_var="Not Exported"
bash -c 'echo "$my_env_var"'

 

Вы увидите пустой вывод.

Без -x переменная существует только в текущей оболочке и не передаётся дочерним процессам.

В качестве альтернативы мы можем использовать export вместо declare -x.

export my_env_var="Exported Value"

 

Оба declare -x и export делают переменные доступными для подоболочек.

 

4. Управление функциями с помощью declare

4.1. Настройка атрибутов для функций

Как я уже упоминал, команда declare позволяет задавать различные атрибуты для переменных и функций. Например, чтобы сделать переменную локальной для функции:

my_function() {
 declare -l local_var="Это локальная переменная"
 echo "$local_var"
}

 

-lфлаг делает local_var функцию локальной.

Если вы вызовете функцию:

my_function

 

Результатом будет:

this is local

 

Несмотря на то, что "This is local" содержит заглавные буквы, declare -l заставляет все символы быть строчными.

 

4.2. Перечислите все функции (-f)

declare -f

 

Здесь отображаются все определенные функции вместе с их содержимым.

 

4.3. Перечислите только названия функций (-F)

declare -F

 

Здесь показаны только имена функций без их определений.

 

4.4. Экспорт функции

declare -xf my_function

 

Флаг -xf делает my_function доступным для дочерних процессов (например, скриптов или подоболочек).

 

5. Проверьте, существует ли переменная или функция

Команду declare также можно использовать для проверки существования переменной или функции:

if declare -p variable_name &>/dev/null; then
    echo "Variable exists"
fi

 

Читать  Создайте и запустите свой первый скрипт Bash Shell

Замените variable_name фактическим именем.

 

6. Удалите атрибуты

Помните, что мы используем -i при объявлении переменной. Мы можем использовать + вместо - для удаления атрибута. Например:

declare +i num # Удаляет целочисленный атрибут из `num`.

 

Теперь вы можете присвоить другой атрибут (например, строку) без каких-либо ошибок:

num=hello

 

Чтобы проверить это, выведите значение переменной:

echo $num

 

Он должен выводить hello.

Обратите внимание, что declare +i num удаляет целочисленный атрибут, но не отменяет и не удаляет переменную.

 

7. Сброс настроек переменных и функций

Мы можем удалить переменные или функции с помощью unset команды.

Чтобы удалить переменную:

unset my_var

 

Чтобы удалить функцию:

unset -f function_name

 

Пример: Объединение управления переменными и функциями

Следующий пример показывает, как declare можно использовать как для переменных, так и для функций:

# Объявите целочисленную переменную
declare -i num=10

# Объявите переменную только для чтения
declare -r readonly_var="This cannot be changed"

# Объявите функцию
my_function() {
 declare -l local_var="This is local"
 echo "$local_var"
}

# Выведите список всех функций
declare -F

# Просмотрите определение my_function
declare -f my_function

Краткое описание declare вариантов

ВариантЦель
-aОбъявите индексированный массив.
-AОбъявите ассоциативный массив (Bash 4+).
-iОбъявите целочисленную переменную.
-rОбъявите переменную или функцию, доступную только для чтения.
-xЭкспортируйте переменную или функцию в среду.
-fОтобразите определение функции.
-FОтобразите названия всех функций.
-lПреобразуйте значение в нижний регистр (для переменных).
-uПреобразуйте значение в верхний регистр (для переменных).
-pОтображение атрибутов и значения переменной.

 

Заключение

Команда declare — одна из полезных команд в расширенных сценариях Bash. В основном она используется для:

  • Определяйте переменные с определёнными атрибутами (например, целые числа, массивы, только для чтения) и управляйте ими,
  • Определяйте функции и управляйте ими (например, перечисляйте, просматривайте или экспортируйте их),
  • Устанавливайте или удаляйте атрибуты для переменных и функций.

 

Надеюсь, это поможет.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Покупка аккаунтов в социальных сетях – явление, которое вызывает множество…

Спасибо!

Теперь редакторы в курсе.