오늘 저는 및 ::
와 같은 함수 이름에 이중 콜론이 있는 Bash 스크립트를 발견했습니다 . 이전에는 Bash 스크립트에서 이 구문을 본 적이 없었으며 스크립트를 호출했을 때 (놀랍게도) 정상적으로 실행되었습니다.file::write()
file::read()
내 시스템(및 온라인)에서 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
표준 출력으로 인쇄되었습니다.
답변1
이는 구현보다 문서가 더 엄격한 경우로, 총계 요인을 줄이기 위한 것일 수 있습니다. 이건 이미이전에 여기서 논의한 바 있음;또한보십시오철저한 테스트예를 들어 [}{
유효한 함수 이름을 설정합니다.
abc::def
또한 이는 유효한 변수 이름이 아니라는 점도 주목할 가치가 있습니다 .
$ abc::def=foo
bash: abc::def=foo: command not found