附加到bash数组的问题

时间:2011-07-20 18:10:06

标签: arrays git bash

我正在尝试创建一个别名,它将获取所有“已修改”的文件并运行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 个答案:

答案 0 :(得分:8)

正如Wrikken所说,while主体在子shell中运行,因此当子shell结束时,对filearray数组的所有更改都将消失。我想到了几种不同的解决方案:

Process substitution(可读性较差但不需要子shell)

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

使用command grouping

在子shell中使用修改后的变量
git diff --name-status | {
  while read line; do
    :
  done
  echo "${filearray[@]}"
}
# filearray is empty here

答案 1 :(得分:2)

你已经将|事件传递到了,这本质上是另一个过程,因此filearray变量是另一个变量(不同的范围)。