2014-10-16 3 views
0

Я пытаюсь сделать что-то очень простое, что заключается в вставке набора дат в массив. Поэтому я запускаю команду git, которая возвращает результат одной строки, из этого результата я получаю даты с помощью awk. После того, как я перебираю все даты и добавляю их в массив. В конце концов, массив все еще пуст, но если я напечатаю массив во время цикла, он, кажется, имеет данные внутри.Пустой массив после цикла while

Почему массив пуст после цикла?

git reflog --date=local <branch_name> | 
awk '{ print $3 " " $4 " " $5 }' | 
while read date; do a+=(`echo "$date"`); done; echo ${a[@]} 

Я понимаю, что каждая команда после трубы выполняется в другом субоболочке, но в данном случае я думаю, что это не влияющий на конечный результат ...

+0

Поскольку вы присваиваете переменной в субоболочке, так что переменная сфера является подоболочка и родитель не может видеть его. – drizzt

ответ

4

Ваш цикл, пока работает в субоболочке , поэтому переменная выходит за пределы области после ее завершения.

Поскольку вы используете Баш вы можете использовать процесс подстановки вместо:

while read date; do 
    a+=($(echo "$date")) 
done < <(git reflog --date=local <branch_name> | awk '{ print $3 " " $4 " " $5 }') 
echo "${a[@]}" 
+0

О, боже, так что мое предположение было совершенно неверным. Оно работает. Благодаря! –

Смежные вопросы