Искусство программирования на языке сценариев командной оболочки



Программирование на языке сценариев командной оболочки - стр. 111


Обратите внимание: эта команда не может сбрасывать позиционные параметры (аргументы).

bash$ unset PATH

bash$ echo $PATH

bash$

Пример 11-15. "Сброс" переменной

#!/bin/bash # unset.sh: Сброс переменной.

variable=hello # Инициализация. echo "variable = $variable"

unset variable # Сброс. # Тот же эффект дает variable= echo "(unset) variable = $variable" # $variable = null.

exit 0

export

Команда export экспортирует переменную, делая ее доступной дочерним процессам. К сожалению, невозможно экспортировать переменную родительскому процессу. В качестве примера использования команды export можно привести сценарии инициализации системы, вызываемые в процессе загрузки, которые инициализируют и экспортируют переменные окружения, делая их доступными для пользовательских процессов.

Пример 11-16. Передача переменных во вложенный сценарий awk, с помощью export

#!/bin/bash

# Еще одна версия сценария "column totaler" (col-totaler.sh) # который суммирует заданную колонку (чисел) в заданном файле. # Здесь используются переменные окружения, которые передаются сценарию 'awk'.

ARGS=2 E_WRONGARGS=65

if [ $# -ne "$ARGS" ] # Проверка количества входных аргументов. then echo "Порядок использования: `basename $0` filename column-number" exit $E_WRONGARGS fi

filename=$1 column_number=$2

#===== До этой строки идентично первоначальному варианту сценария =====#

export column_number # Экспорт номера столбца.

# Начало awk-сценария. # ------------------------------------------------ awk '{ total += $ENVIRON["column_number"] } END { print total }' $filename # ------------------------------------------------ # Конец awk-сценария.

# Спасибо Stephane Chazelas.

exit 0

Допускается объединение инициализации и экспорта переменной в одну инструкцию: export var1=xxx.

Однако, как заметил Greg Keraunen, в некоторых ситуациях такая комбинация может давать иной результат, нежели раздельная инициализация и экспорт.

bash$ export var=(a b); echo ${var[0]}

(a b)

bash$ var=(a b); export var; echo ${var[0]}

a

<


Содержание  Назад  Вперед