" 명령 대체 "는 명령을 실행하고 해당 명령의 출력을 대체 할 수있는 쉘 언어 기능의 이름입니다 ( 대체) 명령의 텍스트.
이를 수행 할 수있는 쉘 언어의 다른 기능은 없습니다.
명령 대체, 즉 전체 $(...) 표현식은 명령 대체의 주요 용도 인 출력으로 대체 됩니다.
명령 대체가 실행되는 명령은 다음 위치에서 실행됩니다. 즉, 부모 셸의 환경에 영향을주지 않는 자체 환경이 있음을 의미합니다.
모든 하위 셸 실행이 명령을 대체하는 것은 아닙니다. ugh (마지막에 추가 예제 참조).
명령 대체가 서브 쉘에서 실행되는 것을 보여주는 예제 :
$ s=123 $ echo "hello $( s=world; echo "$s" )" hello world $ echo "$s" 123
여기에서 변수 s는 문자열 123로 설정됩니다. 다음 줄에서 echo는 명령 대체 결과를 포함하는 문자열에서 호출됩니다. 명령 대체는 s를 문자열 world로 설정하고이 문자열을 에코합니다. world 문자열은 명령 대체에서 명령의 출력 이므로 set -x, 위의 두 번째 줄이 echo "hello world"로 확장되어 터미널에서 hello world를 생성하는 것을 볼 수 있습니다.
$ set -x $ echo "hello $( s=world; echo "$s" )" ++ s=world ++ echo world + echo "hello world" hello world
(bash는 모든 수준에 + 프롬프트의 추가 수준을 추가합니다. 추적 출력의 명령 대체 서브 쉘, 다른 쉘에서는이 작업을 수행하지 않을 수 있습니다)
마지막으로 s (s의 값은 여전히 iv id가 아니라 123입니다. = “5281b18050″>
).
이것은 명령 대체와는 다릅니다.