Логотип

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

Использование команды 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 .

Читать  Как использовать команду diff3 для объединения файлов в 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

 

Читать  Как проверить информацию о зарегистрированном пользователе с помощью команды Who

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

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 доступным для дочерних процессов (например, скриптов или подоболочек).

Читать  10 замечательных примеров команд Awk

 

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

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

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

 

Замените 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. В основном она используется для:

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

 

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

Редактор: AndreyEx

Рейтинг: 4.7 (18 голосов)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

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

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


Загрузка...

Спасибо!

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

Прокрутить страницу до начала