파이프 및 변수 할당

파이프 및 변수 할당

파이프와 변수 할당의 차이점은 무엇입니까?

나는 당신을 알고널바이트를 사용할 수 없습니다.. 또 어떤 예가 있나요?

아래와 같은 파이프라인은 어떻습니까 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

catSTDIN에서 수신된 모든 항목 또는 인수로 나열된 모든 파일의 연결을 STDOUT으로 출력하는 명령입니다. 바라보다man cat

Pipe( |)는 이전 명령의 STDOUT을 다음 명령의 STDIN으로 리디렉션합니다.

따라서 배관은 catCPU 사이클의 낭비입니다.

변수 할당

변수 할당을 사용하면 문자열을 메모리에 임시로 저장할 수 있습니다.

예:

$ 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은 괜찮고 작동합니다.

관련 정보