![읽기 명령이 에코 및 파이프와 함께 작동하지 않는 이유는 무엇입니까? [복사]](https://linux55.com/image/171520/%EC%9D%BD%EA%B8%B0%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20%EC%97%90%EC%BD%94%20%EB%B0%8F%20%ED%8C%8C%EC%9D%B4%ED%94%84%EC%99%80%20%ED%95%A8%EA%BB%98%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
다음 명령과 관련하여 :
$ unset a
$ echo 12 | read a
$ echo $a
$
두 번째 명령문에서는 a의 값이 12로 설정될 것으로 예상합니다. 그러나 a 는 아직 설정되지 않은 것으로 나타났습니다.
답변1
Bash에서 프로세스 대체를 사용할 수 있습니다.
read -r a < <(echo 12)
echo "$a"
아니면 here string
bash에서도 가능합니다.
read -r a <<< 12
echo "$a"
대부분의 셸에서 파이프라인의 각 명령은 별도의 SubShell에서 실행됩니다. 바라보다파이프를 통해 데이터를 읽을 수 없는 이유는 무엇입니까?
사용 중인 셸이 프로세스 교체를 지원하지 않는 경우 임시 파일을 사용해야 합니다.here string
echo 12 > tempfile
read -r a < tempfile
echo "$a"
임시파일은 실제 스크립트의 예일 뿐이지만 임시파일은 안전한 방식으로 fifo
사용되고mktemp