echo에서 bash 내장으로 파이프 읽기를 할 수 없나요? [복사]

echo에서 bash 내장으로 파이프 읽기를 할 수 없나요? [복사]

을 통과하는 루프가 있다고 가정해 보겠습니다 read. 원래 행과 이 행을 다른 변수로 분리하고 싶습니다. 이는 read훌륭하게 작동합니다. 그러나 변수를 에코 read하고 에 파이프하여 변수를 채울 수는 없습니다 . 기본적인 사례는 다음과 같습니다.

echo "a b c d e f g" | read line
echo "Read obtained: $line"

결과:

Read obtained:

내가 원하는 대로 읽도록 하려면 어떻게 해야 합니까? 또는: 읽어달라고 요청하는 것이 왜 잘못되었으며 어떻게 해야 합니까?

답변1

read다음과 같이 파이프에서 무엇을 읽고 있는지 알 수 있습니다 .@yardena의 답변

echo "a b c d e f g" | { read line; echo line=$line; }

답변2

문제는 범위입니다. 변수는 파이프에 의해 생성된 하위 셸 외부에 값이 없습니다. 반대로:

while read line; do echo "read obtained: ${line}"; done < <(echo "a b c d e f g")

필요에 따라 루프를 사용하십시오. 텍스트를 처리하는 데 사용하려면 그렇게 하십시오. -씨

관련 정보