배열에 추가 [중복]

배열에 추가 [중복]

이 스크립트가 있습니다

tests=()
igrepy -l $1 . | while read -r line
do
    // some processing
    tests+=("${second[0]}")
done
echo ${tests[@]}

"두 번째"에 결과가 있는지 확인했지만 결과가 나왔지만 에코가 빈 문자열을 반환합니다. 여기서 무슨 문제가 있습니까? 이것은 rhel6에 있습니다. "igrepy"는 Python 파일만 검색하는 대소문자를 구분하지 않는 grep의 별칭입니다.

답변1

당신이보고있는 문제는 표준 "파이프가 서브 쉘을 생성합니다"입니다 bash.

예를 들어, 다음과 같이 하면

a=10
echo 100 | read a
echo $a

그러면 여전히 bash로 a설정됩니다 .10

귀하의 경우에는

igreppy | while read ...
do
  ....
done

루프 내부의 모든 것은 while서브쉘에 있습니다.

대신 프로세스 대체를 사용하여 다시 작성할 수 있습니다.

while read ...
do
  ....
done < <(igreppy ...)

이제 루프에 대해 하위 쉘이 생성되지 않습니다 while.

관련 정보