Проблема с добавлением в массивы bash - PullRequest
2 голосов
/ 20 июля 2011

Я пытаюсь создать псевдоним, который получит все «измененные» файлы и запустит проверку синтаксиса php для них ...

function gitphpcheck () {

    filearray=()

    git diff --name-status | while read line; do 

        if [[ $line =~ ^M ]]
        then
            filename="`echo $line | awk '{ print $2 }'`"
            echo "$filename" # correct output
            filearray+=($filename)
        fi
    done

    echo "--------------FILES"
    echo ${filearray[@]}

    # will do php check here, but echo of array is blank

}

Ответы [ 2 ]

8 голосов
/ 20 июля 2011

Как говорит Вриккен, в то время как тело работает в подоболочке, поэтому все изменения в массиве файловых массивов исчезнут, когда закончится подоболочка. На ум приходит пара разных решений:

Замена процесса (менее читабельно, но не требует подоболочки)

while read line; do 
  :
done < <(git diff --name-status)
echo "${filearray[@]}"

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

git diff --name-status | {
  while read line; do
    :
  done
  echo "${filearray[@]}"
}
# filearray is empty here
2 голосов
/ 20 июля 2011

Вы передали | вещей к while, что по сути является другим процессом, поэтому переменная filearray - другая (не та же область).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...