읽기 명령이 에코 및 파이프와 함께 작동하지 않는 이유는 무엇입니까? [복사]

읽기 명령이 에코 및 파이프와 함께 작동하지 않는 이유는 무엇입니까? [복사]

다음 명령과 관련하여 :

$ unset a
$ echo 12 | read a
$ echo $a

$

두 번째 명령문에서는 a의 값이 12로 설정될 것으로 예상합니다. 그러나 a 는 아직 설정되지 않은 것으로 나타났습니다.

답변1

Bash에서 프로세스 대체를 사용할 수 있습니다.

read -r a < <(echo 12)
echo "$a"

아니면 here stringbash에서도 가능합니다.

read -r a <<< 12
echo "$a"

대부분의 셸에서 파이프라인의 각 명령은 별도의 SubShell에서 실행됩니다. 바라보다파이프를 통해 데이터를 읽을 수 없는 이유는 무엇입니까?

사용 중인 셸이 프로세스 교체를 지원하지 않는 경우 임시 파일을 사용해야 합니다.here string

echo 12 > tempfile
read -r a < tempfile
echo "$a"

임시파일은 실제 스크립트의 예일 뿐이지만 임시파일은 안전한 방식으로 fifo사용되고mktemp

관련 정보