" 명령 대체 "는 명령을 실행하고 해당 명령의 출력을 대체 할 수있는 쉘 언어 기능의 이름입니다 ( 대체) 명령의 텍스트.
이를 수행 할 수있는 쉘 언어의 다른 기능은 없습니다.
명령 대체, 즉 전체 $(...)
표현식은 명령 대체의 주요 용도 인 출력으로 대체 됩니다.
명령 대체가 실행되는 명령은 다음 위치에서 실행됩니다. 즉, 부모 셸의 환경에 영향을주지 않는 자체 환경이 있음을 의미합니다.
모든 하위 셸 실행이 명령을 대체하는 것은 아닙니다. 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″>
).
이것은 명령 대체와는 다릅니다.