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
여기 있는 이유입니다.
관련된: