Пример 31-1. Западня в подоболочке

Пример 31-1. Западня в подоболочке

#!/bin/bash

# Западня в подоболочке.

outer_variable=внешняя_переменная

echo

echo "outer_variable = $outer_variable"

echo

(

# Запуск в подоболочке

echo "внутри подоболочки outer_variable = $outer_variable"

inner_variable=внутренняя_переменная # Инициализировать

echo "внутри подоболочки inner_variable = $inner_variable"

outer_variable=внутренняя_переменная # Как думаете? Изменит внешнюю переменную?

echo "внутри подоболочки outer_variable = $outer_variable"

# Выход из подоболочки

)

echo

echo "за пределами подоболочки inner_variable = $inner_variable" # Ничего не выводится.

echo "за пределами подоболочки outer_variable = $outer_variable" # внешняя_переменная.

echo

exit 0

Передача вывода от echo по конвейеру команде read может давать неожиданные результаты. В этом сценарии, команда read действует так, как будто бы она была запущена в подоболочке. Вместо нее лучше использовать команду set (см. Пример 11-14).