파이프나 복합 명령은 `:` 및 `echo`와 어떻게 작동하나요?

파이프나 복합 명령은 `:` 및 `echo`와 어떻게 작동하나요?
: [arguments] 

매개변수 확장 및 리디렉션 수행 외에는 아무것도 수행하지 않습니다.

파이프 또는 복합 명령은 어떻게 작동합니까 :?

중괄호가 문제를 해결하지 못하는 것 같습니다.

$ : { echo hello | cat; }
bash: syntax error near unexpected token `}'
    
$ : { if test 1; then echo hello; fi; }
bash: syntax error near unexpected token `then'

큰따옴표는 일부 확장을 방지하므로 이를 :허용합니다.

echo대체를 사용할 때도 동일한 문제가 발생합니다 :.

$ echo { echo hello | cat; }
bash: syntax error near unexpected token `}'
$ echo { if test 1; then echo hello; fi; }
bash: syntax error near unexpected token `then'

기본적으로 확장 및 리디렉션 명령을 실행 :하고 이를 사용하여 결과를 확인하고 싶습니다 echo. 인용문에는 파이프 및 제어 흐름 키워드가 작동하지 않는다는 언급이 없으므로 별칭 확장이 발생하지 않기를 바랍니다.

감사해요.

답변1

: { echo hello | cat; }

쉘은 명령줄을 구문 분석합니다. 먼저 첫 번째 명령의 끝을 찾으려고 시도합니다. 그 끝이 파이프입니다.

그래서 첫 번째 명령은

: { echo hello

아무것도 하지 않습니다. 특히 고양이에게는 아무것도 전송하지 않습니다. 그리고

: { echo hello | cat;

사라지고 왼쪽만 남는데 }이는 유효한 명령이 아닙니다.

답변2

:명령이므로 다른 명령처럼 파이프라인에서 사용할 수 있습니다.

something | :
: | something
something | : | something-else

...그러나 명령은 아무 작업도 수행하지 않으므로 아무 소용이 없습니다 :. 입력을 받지 않고 출력도 생성하지 않습니다. 따라서 이들 중 어느 것도 매우 유용한 파이프가 아닙니다(약간 더 짧은 파이프라고 생각되는 두 번째 파이프를 제외하고 something </dev/null).

예제 명령은 다음과 같습니다.

$ : { echo hello | cat; }

이는 셸에서 보고된 구문 오류처럼 보입니다. 이 { ... }구조를 사용할 수 있습니다바꾸다간단한 명령이지만 어떻게든 결합되지 않는...(?). 이 복합 명령이 정확히 무엇을 하길 원하시나요? 어쩌면 달성하려는 목표에 대해 더 많은 세부 정보를 추가해야 할 수도 있습니다.

관련 정보