![왜 echo hello | Bash에서 myvar && echo $myvar 출력을 읽지 않습니까? Zsh는 잘 작동합니다.](https://linux55.com/image/205078/%EC%99%9C%20echo%20hello%20%7C%20Bash%EC%97%90%EC%84%9C%20myvar%20%26amp%3B%26amp%3B%20echo%20%24myvar%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%9D%BD%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20Zsh%EB%8A%94%20%EC%9E%98%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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
또한보십시오: 내 변수가 하나의 "읽는 동안" 루프에서는 로컬이지만 겉보기에 유사한 다른 루프에서는 로컬이 아닌 이유는 무엇입니까?