2012-01-10 8 views
2

필자는 bash 스크립트를 작성 중이며 함수 이름에 느낌표를 사용하는 것이 편리합니다.bash 함수 이름의 느낌표 -해야합니까?

예 :

function hello! { 
    echo goodbye 
} 
function hello { 
    echo hello 
} 

그리고 그것은 작동한다!

이름 전적으로 문자, 숫자 및 밑줄로 구성된 단어를하고, 문자 나 밑줄로 시작 :

specs를 통해보고 후, 나는이 발견했다. 이름은 쉘 변수 및 함수 이름으로 사용됩니다. 식별자라고도합니다.

내가 규칙을 위반하고있는 것처럼 느껴집니다. 잘못인가? 앞으로이 무언가가 엉망이 될 것입니까? 실제로 무슨 일이야?

답변

4

불타는 호기심에서, 왜 당신의 함수 이름에 느낌표를 사용하는 것이 훨씬 더 편리할까요?

일반적으로 이식성을 이유로 탕을 사용하고 싶지 않을 수 있습니다. 특정 OS의 통역사가이를 받아들이 기 때문에 다른 곳에서 스크립트를 배포해야한다면 약간 다른 버전의 다른 통역사가 동의하지 않을 수 있습니다.

+0

글쎄, 필자가 작성한 함수는 약간의 에러 검사를하는 래퍼이다. 그래서 그것들을 짧게하고 싶다. 래퍼 함께! 실패시 종료, 다른 래퍼는 경고를 출력하고 종료하지 않습니다. 그것은 일을 아주 분명하게 만듭니다. – peter

+1

"!"대신 "_e"(xits)를 사용하면이 작업을 수행 할 수 있습니다. 게다가. 잠재적 인 호환성 문제/버그/그 밖의 사양에없는 것을 사용하지 않아도됩니다.) – Timo

3

이 경우의 의미에 대해서는 잘 모르겠지만 사양에서이 점을 분명히 밝히면 정의되지 않은 동작이므로 피해야한다고 말하고 싶습니다.

5

Bash 사양을 위반하기 때문에 Bash의 버그를 악용 중이므로 버그가 수정되었을 때 코드가 작동하지 않을 수 있습니다. 방울을 던지십시오. !

2

사용하는 것은 좋지 않습니다! 코드를 이식 할 수 있도록하려면 함수 이름에. bash --posix 또는 bash를 "sh"로 호출하면 "hello!"가 거부됩니다. 함수 이름으로. 하지만 나는 bash가 비정상적인 함수 이름 ("hello?" "hello-"및 "hello /"도 작동한다)을 조용히 허용한다고 생각한다. 기능의 중요한 사용은 사용자가 정상적인 명령과 명령을 ls, rm 등)는 파일 시스템이 허용하는 모든 종류의 문자를 포함 할 수 있습니다.

"hello!" 변수로 이름이 작동하지 않습니다.