-
단어 사이에 밑줄 대신 대시를 사용하여 함수나 스크립트의 이름을 지정하면 _
좋지 않을까요 ? 예를 들어, function duplicate-me()
또는 duplicate-me.sh
.
Bash에서 변수 이름에는 밑줄이 포함될 수 있지만 대시는 포함될 수 없습니다. 밑줄 대신 대시를 사용하여 함수와 스크립트의 이름을 지정하면 bash는 그러한 이름을 변수로 해석하지 않으며 그러한 이름을 변수로 잘못 사용하면 bash가 오류 메시지를 표시할 것으로 예상할 수 있습니다.
감사해요.
답변1
이식성을 원한다면 대시를 사용하는 것은 좋지 않으며,표준에서는 영숫자와 밑줄만 허용합니다.이므로 대시가 모든 쉘에서 작동하지 않을 수 있습니다.
$ dash -c 'foo-bar() { echo foo-bar; }; foo-bar'
dash: 1: Syntax error: Bad function name
(Busybox와 ksh도 이를 허용하지 않습니다. Bash, Zsh 및 mksh는 허용합니다.)
Bash를 사용하고 있다는 것을 알고 있다면 문제가 되지 않습니다. 따라서 대시를 좋아한다면 함수 이름에 대시를 사용할 수 있습니다. 그러나 변수 이름 대신 함수를 남용하지 않으려면 e.g. $foo-bar
및 e.g.가 모두 ${foo-bar}
유효한 쉘 구문이라는 점에 유의하십시오. 첫 번째는 변수를 확장 $foo
하고 문자열을 추가합니다 -bar
. 두 번째는 값으로 확장 $foo
하거나 설정되지 않은 경우 지정된 값으로 확장합니다 bar
.
답변2
ㅏPOSIX쉘 함수 이름에는 대시가 포함될 수 없습니다.
[이름은] 밑줄, 숫자, 이식 가능한 문자 집합의 문자로만 구성된 단어입니다. 이름의 첫 번째 문자는 숫자가 아닙니다.
zsh
, bash
및 함수 이름에 대시를 허용하지만 pdksh
및는 허용 하지 않습니다( 실제로 POSIX 쉘이 아닙니다). 함수 이름에 대시를 사용하지 않는 것이 현명하다고 생각합니다.fish
ksh93
dash
fish
변수와 함수는 네임스페이스를 공유하지 않으며, 변수 이름에 대한 POSIX 명명 규칙은 POSIX 쉘 함수 이름과 동일하며, 내가 아는 어떤 쉘도 변수 이름에 대시를 허용하지 않습니다.
스크립트 이름에는 대시나 nul 문자 및 를 제외한 다른 문자가 포함될 수 있습니다 /
. 이는 파일 이름이기 때문입니다.
답변3
예, Bash의 함수 이름에 대시를 사용해도 괜찮습니다.
이것은한 가지 예대시가 포함된 함수 이름이 있는 항목을 사용하세요.
실제로 함수 이름에는 이상하다고 생각할 수 있는 다른 문자가 나타날 수도 있습니다. 이것은동일한 프로젝트의 또 다른 예제 스크립트::
, 일종의 네임스페이스로서 함수 이름의 일부로 s를 사용합니다 . (그러나 후자는 밑줄을 사용하고 전자는 대시를 사용하므로 일관성이 그다지 강력하지 않습니다...)
@choroba가 언급했듯이 함수 이름과 변수 이름의 네임스페이스는 별개이므로 이름이 둘 중 하나를 참조할 수 있는 경우가 실제로 없으므로 허용되는 문자 집합이 다르다는 사실이 실제로 문제를 일으키지 않습니다. 이름은 그 중 하나로만 유효하며 유효하지 않습니다.