터미널을 열고 bash 함수를 호출합니다.
change_path
어디:
change_path(){
export PATH="foobar:$PATH";
}
change_path
항상 현재 쉘에서 실행되고 항상 현재 쉘의 $PATH를 변경합니까 ? 지금까지의 테스트에서는 그런 것 같지만 확실히 알기는 어렵습니다.
답변1
예, 호출한 함수가 현재 셸에서 실행 중입니다.
현재 쉘에서 함수를 가져왔다(정의했다)고 가정합니다. 이는 일부 파일(예: ~/.bashrc)을 가져오거나 현재 셸에 수동으로 함수를 작성하여 수행할 수 있습니다. 다음 명령을 실행하여 이 가정을 확인할 수 있습니다.
$ type -a change_path
함수 정의를 인쇄하는 경우 함수는 현재 셸에 정의되어 있으며 수정이 가능한 현재 셸 변수에 액세스할 수 있습니다.
(...)
이는 변수가 적절하게 제한되어 있는 경우(예: 대신 다음을 사용하는 경우) 함수가 항상 변수를 수정한다는 의미는 아닙니다 {...}
.
$ change_path()(
export PATH="foobar:$PATH";
)
그러나 함수는 실제로 현재 셸에서 계속 실행 중이며 단지 하위 셸을 시작합니다.(...)
이를 확인하려면 bash 매뉴얼을 읽으십시오(강조):
기능
위의 SHELL GRAMMAR에 설명된 대로 정의된 쉘 함수는 나중에 실행하기 위해 일련의 명령을 저장합니다. 쉘 함수의 이름을 단순 명령 이름으로 사용하는 경우에는 해당 함수 이름과 연관된 명령 목록이 실행됩니다.함수는 현재 쉘의 컨텍스트에서 실행됩니다.; 이를 해석하기 위한 새로운 프로세스가 생성되지 않습니다(셸 스크립트 실행과 비교).