카테고리 보관물: Unix

Unix

이중 콜론 ‘::’을 포함하는 Bash 스크립트 함수 이름 Functions은 쉘

나는 이중 콜론과 함수 이름이 오늘 배쉬 스크립트를 건너 왔어요 ::예를 들어, 그들을, file::write()그리고 file::read(). Bash 스크립트 에서이 구문을 본 적이 없으며 스크립트를 호출했을 때 놀랍게도 잘 실행되었습니다.

내 시스템 (및 온라인)에서 Bash 매뉴얼 페이지를 검색 한 후 설명서에서 함수 이름에 대한 구문을 지원하는 것을 찾을 수 없습니다. 예를 들어,이 섹션 Shell Defined Functions은 쉘 함수의 구문을 정의합니다.

function name [()] compound-command [redirection]

(매뉴얼의 다른 곳에서) 토큰 name은 다음과 같이 정의됩니다.

name   A word consisting only of alphanumeric characters and
       underscores, and beginning with an alphabetic character
       or an underscore.  Also referred to as an identifier.

함수 이름에 대한 이중 콜론 구문에 대한 언급은 없습니다.

지금까지 찾은이 이중 콜론 구문에 대한 다른 참조 는 “패키지”의 함수 이름에 이중 콜론 구문을 사용하는 것이 좋습니다 (예 : 하위 참조 Naming Conventions > Function Names) mypackage::myfunction().

함수 이름에 대한이 이중 콜론 구문은 Bash 쉘의 합법적 인 기능입니까, 아니면 문서화되지 않은 기능입니까? 합법적이라면 Bash 매뉴얼에 어디에 기록되어 있습니까? 나는보고 보았지만 매뉴얼에서 그것에 대해 아무것도 찾을 수 없습니다. 내가 찾은 가장 가까운 ::것은 PATH환경 변수를 사용하여 현재 작업 디렉토리를 검색 경로에 추가하는 것입니다.

#!/bin/bash
function abc::def() {
    echo "${FUNCNAME[0]}"
}
abc::def

이 스크립트를 세 가지 다른 Linux 배포판에서 테스트했으며 세 가지 모두 abc::def에서 stdout으로 인쇄 합니다.



답변

이것은 아마도 문서를 구현보다 더 엄격하게하는 경우 일 수 있으며, 아마도 풋건 팩터를 낮추려는 시도 일 것입니다. 이것에 대해서는 이전논의바있다 . 예를 들어 유효한 함수 이름인지 확인하는 철저한 테스트 도 참조하십시오 [}{.

abc::def유효한 변수 이름이 아닌 것도 주목할 가치가 있습니다 .

$ abc::def=foo
bash: abc::def=foo: command not found

답변