파이프와 변수 할당의 차이점은 무엇입니까?
나는 당신을 알고널바이트를 사용할 수 없습니다.. 또 어떤 예가 있나요?
아래와 같은 파이프라인은 어떻습니까 yes | cat
? y
출력을 할당할 때
test=`yes`
아무것도 출력하지 않습니다. 실행 중에 cat
데이터가 전송되기 전에 전체 명령이 실행됩니까?
답변1
test=`yes`
전체 출력을 읽고 yes
이를 변수에 할당하려고 합니다 test
.
의 출력은 yes
무한하므로 이 할당은 무한 루프를 호출합니다.
그 뒤에서는 작업 pipe
과 같은 운영 체제 메커니즘을 사용합니다 |
.
test=`yes`
약간
yes | thisShell.slurpInputAndSaveToVariable test
cat
전체 입력을 흡수하려는 시도가 이루어지지 않으므로 스트리밍 생산자(이 경우 무제한) 및 소비자 쌍으로 동시에 실행될 수 있습니다 yes
.cat
답변2
관로
yes
종료될 때까지 문자열(기본값은 "y")을 반복적으로 출력하는 명령입니다. 바라보다man yes
cat
STDIN에서 수신된 모든 항목 또는 인수로 나열된 모든 파일의 연결을 STDOUT으로 출력하는 명령입니다. 바라보다man cat
Pipe( |
)는 이전 명령의 STDOUT을 다음 명령의 STDIN으로 리디렉션합니다.
따라서 배관은 cat
CPU 사이클의 낭비입니다.
변수 할당
변수 할당을 사용하면 문자열을 메모리에 임시로 저장할 수 있습니다.
예:
$ test="this is a string!"
$ echo $test
this is a string!
명령의 결과를 변수에 저장하려면 서브쉘을 사용해야 합니다.
예:
$ echo "file contents :)" > test.file
$ test="$(cat test.file)"
$ echo $test
file contents :)
인용하다
Bash의 자세한 사용법은 다음을 참고하세요.https://www.gnu.org/software/bash/manual/bash.html
답변3
파이프는 그 이름이 의미하는 바를 정확히 수행합니다. 즉, 한 파이프 구성원에서 다음 파이프 구성원으로 데이터를 스트리밍하는 방법을 제공합니다. 크기에 제한 없이 스트림을 처리할 수 있습니다. 무한 스트림을 처리하는 것이 의미가 있는 상황에는 때때로 지금까지 본 내용에 대한 진행률이나 통계를 인쇄하는 경우와 사용자가 언제든지 파이프를 종료할 수 있는 상황이 포함됩니다.
반면에 쉘 대체 구성(백틱 또는
$()
)은 포함된 명령문이 종료될 때까지 완료되지 않습니다. 예제의 명령문은 yes
종료되지 않으므로 둘 중 하나도 종료되지 않습니다 $(yes)
.
나는 이것이 파이프와는 매우 다른 할당 방법이라고 말하고 싶습니다. 실제로 변수에 무한한 길이 값을 할당할 수는 없지만 파이프 1은 괜찮고 작동합니다.