왜 echo hello | Bash에서 myvar && echo $myvar 출력을 읽지 않습니까? Zsh는 잘 작동합니다.

왜 echo hello | Bash에서 myvar && echo $myvar 출력을 읽지 않습니까? Zsh는 잘 작동합니다.

myvar이 예에서 Bash가 왜 가치가 없는지 전혀 이해하지 못합니다.

 echo hello | read myvar && echo $myvar

두 개의 별도 명령으로 명령을 실행하면 변수의 범위가 두 번째 줄에 존재하지 않는다는 것을 이해합니다.

답변1

파이프된 프로세스는 하위 셸에서 실행되며 하위 프로세스는 상위 프로세스의 환경에 영향을 미칠 수 없습니다. 하위 프로세스가 종료되면 자체 환경도 사라집니다. 귀하의 예에서 하위 쉘에서 실행 - myvar이 설정되었지만 두 명령문을 실행하는 상위 쉘로 read myvar다시 전파되지 않습니다 .echo

여기에서 문자열을 사용하거나 리디렉션해야 합니다.프로세스 교체파이프 대신. 예를 들어:

문자열은 다음과 같습니다.

$ read myvar <<<"hello" && echo $myvar
hello

문자열은 고정 문자열이거나 변수이거나 둘의 조합일 수 있습니다.

$ read myvar <<<"Hello $USER, your home is $HOME" && echo $myvar
Hello cas, your home is /home/cas

리디렉션 및 프로세스 대체:

$ read myvar < <(echo hello) && echo $myvar
hello

또한보십시오: 내 변수가 하나의 "읽는 동안" 루프에서는 로컬이지만 겉보기에 유사한 다른 루프에서는 로컬이 아닌 이유는 무엇입니까?

관련 정보