![echo에서 bash 내장으로 파이프 읽기를 할 수 없나요? [복사]](https://linux55.com/image/117657/echo%EC%97%90%EC%84%9C%20bash%20%EB%82%B4%EC%9E%A5%EC%9C%BC%EB%A1%9C%20%ED%8C%8C%EC%9D%B4%ED%94%84%20%EC%9D%BD%EA%B8%B0%EB%A5%BC%20%ED%95%A0%20%EC%88%98%20%EC%97%86%EB%82%98%EC%9A%94%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
을 통과하는 루프가 있다고 가정해 보겠습니다 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")
필요에 따라 루프를 사용하십시오. 텍스트를 처리하는 데 사용하려면 그렇게 하십시오. -씨