저는 Bash 쉘에서 작업 중입니다. 내가 명령을 입력하면
cmd1 $(cmd2) $(cmd3)
명령 실행 순서는 다음과 같습니다:
cmd2
-> cmd3
->cmd1
내가 볼 때쉘 작업Bash 쉘 명령으로는 이 상황을 잘 이해할 수 없습니다.
Bash 쉘이 "명령 대체"를 처리하는 방법을 정확히 지정할 수 있습니까? 예를 들어 토큰화는 모든 명령 대체에서 반복적으로 반환됩니까?
답변1
그 이유는 다른 셸 확장과 마찬가지로 명령 대체도 명령 실행을 위한 명령줄 인수를 생성하는 동적 방법을 제공하도록 설계되었기 때문입니다. 따라서 cmd1
및 의 출력을 인수로 사용하여 실행 하려면 둘 다 먼저 실행해야 합니다.cmd2
cmd3
쉘 확장의 정확한 순서는 다음과 같습니다.배쉬 매뉴얼에서. 명령 대체는 중괄호 확장 다음으로, 물결표 확장, 인수(즉, 변수) 확장 및 산술 확장과 동일한 위치에 옵니다. 순위가 동일한 확장을 평가합니다."왼쪽에서 오른쪽으로"즉, 명령줄에 나타나는 순서대로입니다.
이는 중첩된 대체의 경우에 필요합니다.
cmd1 $(cmd2 $(cmd3)) $(cmd4)
결과가 호출에 전달되기 전에 첫 번째 확장 자체를 확장 한 다음 확장 해야 하기 때문에 순서는 cmd3
-> cmd2
-> cmd4
-> 입니다 .cmd1
$(cmd2 $(cmd3))
$(cmd3)
$(cmd4)
cmd1