2015-07-29 2 views
1

Я пытаюсь создать скрипт, который найдет файлы, возьмет их dirnames, а затем отправится туда и что-то предпримет. У меня проблема с добавлением элементов в массив, кто я хочу быть контейнером dirnames.Bash scripting & array pushing

код выглядит следующим образом:

dirnames=() 
while read -r line; do 
     echo "Looking for dirname "$line 
     dirname=$(dirname $(egrep -lir --include=pom.xml "<name>"$line"</name>" $application_dir)) 
     dirnames+=($dirname) 
done < $modules_file 

echo "Acquired dirnames" 
echo $dirnames 

И это ответ:

Looking for dirname a 
Looking for dirname b 
Looking for dirname c 
Acquired dirnames 
/home/user/dev/workspace/a 

У меня есть только первый реж в моем "массив". Похоже, что все остальные итерации отсутствуют, и я знаю, что эти другие dirnames найдены из-за того, что я пытаюсь поменять местами.

Я много читал о массивах в bash, но везде этот подход работает отлично.

Любые советы?

ответ

1

Bash синтаксис, чтобы развернуть весь массив состоит в следующем:

echo ${dirnames[*]} 

Или вы можете получить доступ к отдельным элементам. например

echo ${dirnames[1]} 

Или цикл по массиву:

for d in ${dirnames[*]}; do 
    echo $d 
done 
+0

Ох, дерьмо - спасибо за это, я где-то видел, что кто-то перечисляет целый массив только с именем массива. большое спасибо – Lidjan

0

Я думаю, что проблема с тем, как вы печатаете ваши dirnames массива. $ {dirnames} напечатает только первый элемент. Попробуйте напечатать его вот так:

echo ${dirnames[@]}