명령 대체
Command substitution컴퓨팅에서 명령 대체는 명령이 실행되도록 하고 그 출력을 다른 명령어에 인수로서 명령행에 다시 붙여넣을 수 있게 하는 기능이다.명령 대체는 1979년 버전 7 유닉스와 함께 도입된 본 [1]셸에 처음 등장했으며, 이후 모든 유닉스 셸의 특징으로 남아 있다.이 기능은 이후 펄, PHP, 루비, 윈도우 산하 마이크로소프트 파워셀을 포함한 다른 프로그래밍 언어에서도 채택되었다.마이크로소프트의 CMD에도 등장한다.EXE in theFOR
명령과 명령( )
명령하다
구문 및 의미론
셸은 일반적으로 표준 출력을 셸에 다시 연결한 상태에서 첫 번째 명령을 실행하는 하위 프로세스를 생성하여 명령 대체를 실행하며, 출력 내용을 읽고 공백으로 구분된 단어로 구문 분석한다.껍데기는 파이프가 닫히거나 아이가 죽을 때까지 아이의 모든 출력이 있다는 것을 알 수 없기 때문에 그때까지 기다린 뒤 또 다른 아이 과정을 시작하여 두 번째 명령을 실행한다.
이 C 셸 예는 문자열을 포함하는 모든 C 파일을 검색하는 방법을 보여준다. malloc
사용.fgrep
그리고 나서 다음 작업을 사용하여 발견된 모든 항목을 편집한다.vi
편집자여기 보이는 구문 표기법은`
...`
, 구분 기호로 백쿼터를 사용하는 것은 원래 스타일이며 모든 일반적인 유닉스 쉘에서 지원된다.
#!/bin/csh vi 'fgrep -l malloc *.c'
구문, 타이핑 방식, 의미론, 작동 방식 모두 반대 의견이 제기돼 왔다.
쌍방향 명령 프로세서의 중요한 요소인 타이핑이 쉽지만, 구문은 왼쪽과 오른쪽 구분 기호가 모두 같기 때문에 하나의 명령 대체물을 다른 명령 안에 넣으면서 둥지를 틀기가 어색하다는 비판을 받아왔다.[2]KornShell([3]ksh)은 이를 대체 표기법으로 해결했다.$(
...)
, 변수 대체에 사용되는 공칭 스타일에서 차용.오늘날 대부분의 UNIX 셸은 이 구문을 지원한다.마이크로소프트의 PowerShell도 이 표기법을 사용하며, 같은 의미 체계를 가지고 있다.
#!/bin/fgrep vi $(fgrep -l malloc *.c)
백스페이스에서 산출물을 말로 분해하는 의미론도 비판을 받아왔다.파일 이름에 공간이 전혀 없는 초기 유닉스 시스템에서는 잘 작동했지만 파일 이름에 공간이 확실히 포함될 수 있는 현대 윈도우나 리눅스 시스템에서는 전혀 잘 작동하지 않는다.[4]위의 두 가지 예에서 파일 이름 중 하나와 일치하는 항목이 있는 경우*.c
와일드카드에는 공백이 포함되어 있으며, 그 파일 이름은 다음과 같은 두 개의 개별 인수로 나뉜다.vi
의도된 것이 아닌 것은 분명하다.해밀턴 C 쉘은 이중 백쿼트 표기법으로 이 문제를 해결했고``
...``
그것은 줄 바꿈에만 말로 표현된다.[5]
이것은 를 이용한 명령 대체의 예다.()
PowerShell의 연산자:
$MyVariable = (ls) 메아리치다$MyVariable
표현 대체
관련 시설인 표현 대체는 백쿼트(또는 "Quasiquote") 연산자로 표시된 식에 쉼표 연산자를 사용하여 호출되는 공통 리스포트 및 체계 언어와, ABC에서는 텍스트 디스플레이 내부의 백쿼트 사이에 동봉된 표현(문자체)을 사용하여 호출된다.예를 들어, ABC 명령은 출력을 생성한다.
참고 항목
참조
- ^ 다다, 하워드."프로그래밍 언어의 A-Z: 본 셸, 또는 sh, 2009년 3월 5일 컴퓨터월드, "본 셸 또는 sh"의 제작자인 스티브 본과의 심층 인터뷰.
- ^ Unix Power Tools: 45.31 중첩 명령 대체.
- ^ Rosenblatt, Bill; Arnold Robbins (2002). Learning the Korn Shell (2 ed.). O'Reilly Media, Inc. p. 127. ISBN 978-0-596-00195-7. Retrieved 2010-07-20.
The syntax of command substitution is:
$(Unix command)
The command inside the parenthesis is run, and anything the command writes to standard output (and to standard error) is returned as the value of the expression. - ^ Johnson, Chris (2009), "8", Pro Bash Programming: Scripting the Linux Shell, New York, NY: Springer-Verlag New York, Inc., p. 84, retrieved December 19, 2014,
File names containing spaces are an abomination, but they are so common nowadays that scripts must take their possibility (or should I say inevitability?) into account. ... The result of command substitution is subject to word splitting
- ^ Hamilton C shell User guide: I/O redirection: Command substitution, Hamilton Laboratories, archived from the original on December 19, 2014, retrieved December 19, 2014