Для потомков: Этот ответ не совсем решил вопрос оригинального плаката, должно быть, были некоторые проблемы с окружающей средой при работе.
Поскольку article
определяется тольков цикле for
он не определен после done
…
Вы можете просто бросить строку: article=
(ничего после =
) перед началом цикла for
, чтобы получитьпеременная вне области действия.
По сути, все, «созданное» внутри цикла, длится только до выхода из цикла.
(http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_scoping больше, чем вы хотитезнать о лексической области видимости и друзьях.)
В интересах будущих читателей, у которых может быть похожая проблема:
→ Это неверно in bash
, do/done
не создает лексическую область видимости, если не используется ()
.Тем не менее, похоже, что правильно для некоторых версий или настроек для zsh
(согласно последующим комментариям от первоначального автора);но в конфигурации по умолчанию для Fedora 15, равной zsh
, она соответствует приведенному ниже поведению, как и bash
(область не вложена без ()
)
for x in 1 2 3; do
n="$x foo"
echo -n "$n,"
done
echo "($n)"
→ 1 foo,2 foo,3 foo,(3 foo)
for x in 1 2 3; do (
n="$x foo"
echo -n "$n,"
); done
echo "($n)"
→ 1 foo,2 foo,3 foo,()
Я не знаю что могло на самом деле вызвать проблему, вызвавшую эту проблему, просто рад, что она ушла ...