programing

올바른 Bash 및 셸 스크립트 변수 대문자화

abcjava 2023. 5. 1. 19:47
반응형

올바른 Bash 및 셸 스크립트 변수 대문자화

저는 모든 대문자로 된 변수가 있는 많은 셸 스크립트를 접합니다. 그리고 저는 항상 그것에 대해 심각한 오해가 있다고 생각했습니다.제가 알기로는 관례상(그리고 아마도 오래 전에 필요했을 때) 환경 변수는 올캡에 있습니다.

그러나 Bash와 같은 현대적인 스크립팅 환경에서 저는 항상 임시 변수에는 소문자 이름을 사용하고 내보낸(즉, 환경) 변수에만 대문자 이름을 사용하는 것을 선호했습니다.예:

#!/usr/bin/env bash
year=$(date +%Y)
echo "It is $year."
export JAVA_HOME="$HOME/java"

그것은 항상 내가 생각하는 것이었습니다.이 접근법에 동의하거나 동의하지 않는 권위적인 출처가 있습니까, 아니면 순전히 스타일의 문제입니까?

관례별수, 환변경(▁()PAGER,EDITOR및 셸 (...)는 다음과 같습니다.SHELL,BASH_VERSION...)는 대문자로 표시됩니다.다른 모든 변수 이름은 소문자여야 합니다.

변수 이름은 대소문자를 구분합니다. 이 규칙은 환경 및 내부 변수를 실수로 재정의하지 않습니다.

UNIX 도구나 셸에서 사용하는 모든 환경 변수를 알아야 덮어쓰기를 방지할 수 있습니다.변수인 경우 소문자로 표시합니다.내보낼 경우 대문자로 표시합니다.

일관되게 따르는 명명 규칙은 항상 유용합니다.다음은 셸 변수 이름 지정에 유용한 몇 가지 팁입니다.

  • 내보낸 변수와 상수는 특히 여러 스크립트 또는 프로세스에서 공유될 때 모든 대문자와 밑줄을 사용합니다.관련 변수가 두드러지고 모두 대문자인 Bash 내부 변수와 충돌하지 않도록 해당될 때마다 공통 접두사를 사용합니다.

    예:

    • 접두사를 :JOB_HOME JOB_LOG JOB_TEMP JOB_RUN_CONTROL
    • 상수:LOG_DEBUG LOG_INFO LOG_ERROR STATUS_OK STATUS_ERROR STATUS_WARNING
  • 단일 스크립트 또는 블록으로 범위가 지정된 모든 변수에는 "스네이크 케이스"(모두 소문자밑줄)를 사용합니다.

    예:input_file first_value max_amount num_errors

    변수와 때합니다. 를 들어, " 로컬 변 수 경 혼 있 대 합 자 문 를 소 사 용 합 니 다 우 는 관 가 계 어 떤 가 다 와 수 음 과 변old_IFS old_HOME

  • "개인" 변수 및 함수에는 선행 밑줄을 사용합니다.이것은 라이브러리 파일 내의 함수나 파일 간의 함수가 주 코드에서 유사하게 명명된 어떤 함수와도 충돌하지 않고 변수를 공유해야 하는 셸 라이브러리를 작성하는 경우 특히 유용합니다.

    예:_debug _debug_level _current_log_file

  • 낙타 케이스를 피합니다.이렇게 하면 케이스 오타로 인한 버그를 최소화할 수 있습니다.셸 변수는 대소문자를 구분합니다.

    예:inputArray thisLooksBAD,numRecordsProcessed,veryInconsistent_style


참고 항목:

셸 변수를 환경으로 내보낼 경우 POSIX(이슈 7, 2018 에디션) 환경 변수 정의에서 다음을 지정한다는 점을 고려할 필요가 있습니다.

됩니다(POSIX.1-2017 "Shell and Utilities 볼륨에있는의틸리티유에용대다변자는하이서, 문은름구수니경숫및밑됩)._는 휴대용 문자 집합에 정의된 문자이며 숫자로 시작하지 않습니다.

...

소문자가 포함된 환경 변수 이름의 이름 공간은 응용 프로그램용으로 예약됩니다.응용 프로그램은 표준 유틸리티의 동작을 수정하지 않고 이 이름 공간의 이름으로 환경 변수를 정의할 수 있습니다.

저는 당신이 하는 것을 합니다.권위적인 출처가 있는지는 의문이지만, 상당히 광범위한 사실상의 기준인 것 같습니다.

사실, "환경 변수"라는 용어는 상당히 최근의 동전인 것 같습니다.1984년에 출판된 그들의 고전적인 책 "UNIX 프로그래밍 환경"에서 커니헌과 파이크는 "셸 변수"에 대해서만 언급합니다 - 심지어 색인에는 "환경"에 대한 항목도 없습니다!

그것은 단지 매우 널리 개최된 회의일 뿐이며, 저는 그것에 대한 "권위적인" 출처가 있는지 의심스럽습니다.

환경 변수와 글로벌 변수 모두에 ALL_CAPS를 사용합니다.물론, Bash에는 실제 변수 범위가 없으므로 전역으로 사용되는 변수의 상당 부분(대부분 설정 및 상태 추적)이 있으며, 상대적으로 적은 '로컬'(카운터, 반복기, 부분적으로 구성된 문자열 및 임시)이 있습니다.

Bash 및 대부분의 셸 스크립트 인터프리터는 함수(예: typet, declarate, local) 내에서 글로벌 변수와 로컬 변수를 인식하므로 적절히 사용해야 합니다.이전에 언급했듯이, "POSIX.1-2017의 Shell and Utilities 볼륨에 있는 유틸리티에서 사용하는 환경 변수 이름은 대문자, 숫자 및 휴대용 문자 집합에 정의된 문자의 밑줄( _ )로만 구성되며 숫자로 시작하지 않습니다. ...소문자가 포함된 환경 변수 이름의 이름 공간은 응용 프로그램용으로 예약됩니다.응용 프로그램은 표준 유틸리티의 동작을 수정하지 않고도 이 이름 공간에서 이름을 가진 모든 환경 변수를 정의할 수 있습니다." (POSIX IEEE 표준 1003.1-2008 섹션 8.1)

언급URL : https://stackoverflow.com/questions/673055/correct-bash-and-shell-script-variable-capitalization

반응형