에코, 파이프 및 명령 대체

에코, 파이프 및 명령 대체

echo명령을 (파이프) 로 바꾸고 싶습니다 |. 예를 들어,

$(echo "echo 'hello' | cat")

반품

'hello' | cat

나는 이것이 다음과 같이 행동하기를 바랍니다.

echo 'hello' | cat

반품

hello

그러나 그것은 진실이 아니다. 왜?

추신. 나도 알아 eval그리고

eval $(echo "echo 'hello' | cat")

예상대로 작동

답변1

|&&(or, or 등)과 같은 구문 요소는 ;명령줄에서 가장 먼저 구문 분석되는 것으로 인식되며 인수/변수 확장 후에는 다시 처리되지 않습니다 .

매개변수 확장, 명령 대체 및 산술 확장 후에 발생하는 거의 유일한 일은 단어 분리 및 파일 이름 글로빙입니다. 확장된 출력도 다시 확장되지 않습니다. 이는 인쇄되지 않습니다 6.

$ var='$((1+2+3))'         # $((..)) not expanded here (single-quotes)
$ echo $var                # $((..)) not expanded here either
$((1+2+3))

다시 구문 분석하고 확장하는 것이 바로 우리가 eval여기 있는 이유입니다.

관련된:

관련 정보