이 스크립트가 있습니다
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
.