답변:
보증 :
2.9.5 기능 정의 명령
함수는 새로운 위치 매개 변수를 사용하여 복합 명령을 호출하기위한 간단한 명령으로 사용되는 사용자 정의 이름입니다. 기능은 "기능 정의 명령"으로 정의됩니다. [...]
함수 이름은 fname입니다. 응용 프로그램은 이름 (XBD 이름 참조)이며 특수 내장 유틸리티의 이름이 아닌지 확인해야합니다. 구현시 함수 이름의 다른 문자를 확장명으로 사용할 수 있습니다. 구현은 함수와 변수에 대해 별도의 네임 스페이스를 유지해야합니다.
unset
가 -v
하고 -f
주어진 이름으로 변수 나 함수를 설정 해제를 선택할 수 있습니다. bash
(대부분의 다른 조개와 반대) 설정 해제합니다 foo
기능 을 가진 unset foo
어떤 존재하지 않는 경우는 foo
변수를 (!), POSIX에 의해 허용되는 행동을. POSIX 스크립트에 좋은 항상 하나를 사용에 연습을 이유 있다고 -v
나 -f
(에 물론 bash
뿐만 아니라 스크립트 만, 참고 unset
항상에서 변수 설정을 해제하지 않을 수는 bash
, bash
변수 범위 지정은 꽤 몇 가지 문제가 있습니다).
변수와 함수는 대시로 다른 네임 스페이스에 있으며 POSIX 로도 지정됩니다 .
구현은 함수와 변수에 대해 별도의 네임 스페이스를 유지해야합니다.
또한 변수는 기본적으로 전역 범위를 갖습니다. 일부 셸 (예 : bash, ksh 및 zsh)은 local
로컬 범위 만있는 함수에서 변수를 선언 하는 키워드를 제공합니다 .
네, 현재보고있는 행동은 POSIX에 의해 보장됩니다.
초기 제안에서 함수에 대한 설명은 함수가 미니어처 쉘 스크립트처럼 동작해야한다는 개념을 기반으로합니다. 즉, 변수 공유를 제외하고 실행 환경의 대부분의 요소는 마치 새로운 실행 환경 인 것처럼 동작해야합니다. [..]
[..] 함수 내의 지역 변수를 고려하여 다른 초기 제안에 포함
local
되었지만 함수에 대해 개발 된 간단한 모델에 맞지 않고 아직 추가에 반대가 있었기 때문에 제거되었습니다. 역사적 실천의 일부가 아닌 또 다른 새로운 특별 내장. 구현은 식별자를 예약한다local
(물론 같이typeset
케이스에 콘 셸에 사용 된)이 로컬 변수 메커니즘이 표준의 향후 버전에서 채택된다.
(강조 광산)
local
, 배쉬는 최근 (4.4) 빌린 (중증 예를 들어 bash는 하나의 부서에 비해)가 최대한 일관성있는 인터페이스 중 하나, local -
현지 범위에 대한 ( ash) (해당 하나의 $-
변수에 대해서만 애쉬 스타일 범위 지정 구현 ). ksh 및 yash에는 local
(pdksh 변형 만 있음 local
)이 없지만 typeset
대신 ksh93 typeset
에서는 ksh 구문을 사용하여 선언 된 함수에서만 로컬 (정적) 범위를 제공합니다).
fn
함수가 별도의 네임 스페이스에 있음을 증명하지 않습니다 . 한 번 실행하면 정의가 지워지면 정확히 동일한 동작을 볼 수 있습니다. 함수가 여전히 정의되어 있음을 보여 주어야합니다 (예 :type fn
나중에).