이중 콜론 '::'을 포함하는 Bash 스크립트 함수 이름


17

나는 이중 콜론과 함수 이름이 오늘 배쉬 스크립트를 건너 왔어요 ::예를 들어, 그들을, 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으로 인쇄 합니다.




링크 주셔서 감사합니다. 이상한. 게시하기 전에 "bash double colon"(따옴표 제외)을 검색했지만 아무것도 찾지 못했습니다. 이미 답변 된 질문을 다시 한 번 사과드립니다. .
Jim Fischer

답변:


16

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

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

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

4
그냥 생생하게 명확하게하기 -하지 file::read않고 [}{유효 POSIX이다
스티븐 페니
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.