애초에 명령 대체를 수행하는 이유는 무엇입니까?

애초에 명령 대체를 수행하는 이유는 무엇입니까?

저는 Bash 쉘에서 작업 중입니다. 내가 명령을 입력하면

cmd1 $(cmd2) $(cmd3)

명령 실행 순서는 다음과 같습니다: cmd2-> cmd3->cmd1

내가 볼 때쉘 작업Bash 쉘 명령으로는 이 상황을 잘 이해할 수 없습니다.

Bash 쉘이 "명령 대체"를 처리하는 방법을 정확히 지정할 수 있습니까? 예를 들어 토큰화는 모든 명령 대체에서 반복적으로 반환됩니까?

답변1

그 이유는 다른 셸 확장과 마찬가지로 명령 대체도 명령 실행을 위한 명령줄 인수를 생성하는 동적 방법을 제공하도록 설계되었기 때문입니다. 따라서 cmd1및 의 출력을 인수로 사용하여 실행 하려면 둘 다 먼저 실행해야 합니다.cmd2cmd3

쉘 확장의 정확한 순서는 다음과 같습니다.배쉬 매뉴얼에서. 명령 대체는 중괄호 확장 다음으로, 물결표 확장, 인수(즉, 변수) 확장 및 산술 확장과 동일한 위치에 옵니다. 순위가 동일한 확장을 평가합니다."왼쪽에서 오른쪽으로"즉, 명령줄에 나타나는 순서대로입니다.

이는 중첩된 대체의 경우에 필요합니다.

cmd1 $(cmd2 $(cmd3)) $(cmd4)

결과가 호출에 전달되기 전에 첫 번째 확장 자체를 확장 한 다음 확장 해야 하기 때문에 순서는 cmd3-> cmd2-> cmd4-> 입니다 .cmd1$(cmd2 $(cmd3))$(cmd3)$(cmd4)cmd1

관련 정보