쉘 스크립트에 변수에 대한 명명 규칙이 있습니까?


113

대부분의 언어에는 변수에 대한 명명 규칙이 있으며 쉘 스크립트에서 가장 일반적인 스타일은 MY_VARIABLE=foo입니다. 이것이 관습입니까 아니면 전역 변수에만 해당됩니까? 스크립트의 로컬 변수는 어떻습니까?


1
내가 모두가 따라야 할 것을 아는 유일한 것은 모두 대문자 이름이 쉘을 위해 예약되어야한다는 것입니다. 쉘이 향후에 예약 할 수 있는 중요 PATH하거나 중요한 것을 실수로 막는 것을 피하기 위해 사용하지 마십시오 HOME.
jw013

3
실제로 모든 대문자 이름은 일반적으로 환경 변수에 사용됩니다. PATH와 같은 일부 변수는 셸에서 해석되고 다른 변수 (LANGUAGE 또는 PRINTER와 같은)는 다른 프로그램에서 해석 될 수 있지만 특별한 것은 없습니다.
jlp

'환경 변수'는 실제로 올바른 이름이므로 내 답변에 포함시킬 것입니다.
jippie

신뢰할 수는 없지만이 Google 가이드에는 google.github.io/styleguide/shell.xml 좋은 제안이 있습니다. 상수 및 내 보낸 변수, 다른 모든 경우에는 뱀 경우에만 모든 대문자를 고수하는 것이 좋습니다. 개인적으로 나는 다른 사람들이 그것을 추천하지 않기 때문에 내 세계에 낙타 사건을 좋아합니다. 게다가 나는 그들이 읽는 방식을 좋아합니다.
Binary Phile

답변:


111

운영 체제 또는 셸 시작 스크립트 등에 의해 도입 된 환경 변수 또는 셸 변수는 일반적으로 모두에 CAPITALS있습니다.

자신의 변수가 이러한 변수와 충돌하지 않도록하려면을 사용하는 것이 좋습니다 lower case.


32
lower_case밑줄로 분리하거나 camelCase?
개렛 홀

3
@GarrettHall 그것은 전적으로 당신에게 달려 있습니다. 막대기 하나를 고르면 일관성은 실제 선택보다 중요합니다.
jw013

2
맛의 문제? 나는 C 스타일 camelCase이 더 짧고 못생긴 밑줄을 사용하지 않기 때문에 개인적으로 좋아합니다 . 맛, 스타일, ...
jippie

19
맛의 문제? 나는 개인적으로 밑줄이 분리되어 읽기 쉽습니다.
janos

4
완전성을 위해 환경 변수는 기존의 모든 대문자 셸 변수 이름의 유일한 범주가 아닙니다.이 규칙은 내장 (예 PWD: PS4, 또는 BASH_SOURCE) 에도 적용됩니다 .
찰스 더피

62

예, 변수 이름을 포함하여 bash에 대한 전체 코드 스타일 규칙이 있습니다. 예를 들어 다음은 Google의 Shell Style Guide 입니다.

변수 이름을 구체적으로 요약하면 다음과 같습니다.

변수 이름 : 소문자이며 밑줄로 단어를 구분합니다. 전의:my_variable_name

상수환경 변수 이름 : 밑줄로 구분 된 모든 대문자는 파일 맨 위에 선언됩니다. 전의:MY_CONSTANT


1
위의 링크는 이제 죽었지 만 이것이 링크 된 것으로 생각합니다. google.github.io/styleguide/shell.xml
Sam

1
@Sam, 감사합니다. 그렇습니다. 시간 구글은 롤 googlecode.com 사용을 중단 대해 그것은이다
Anonsage

1
Google의 말 항상 하십니까 ? ;-)
tim.rohrer 18:32에

1
이 컨벤션은 자체 오픈 소스 프로젝트를위한 Google의 컨벤션입니다. 규칙은 우수하지만 모든 프로젝트에 적용 할 수는 없습니다 .
smonff

1

단어를 구분하는 밑줄이 가장 좋은 방법 인 것 같습니다.
자유롭게 선택할 수있을 때 camelCase보다 snake_case를 선호하는 몇 가지 이유가 있습니다.

  1. 융통성 : 대문자와 소문자를 사용할 수 있습니다 (예 : MY_CONSTANTmy_variable).
  2. 일관성 : 숫자를 더 읽기 쉽게하기 위해 숫자를 분리 할 수 ​​있으며 (예 :) 1_000_000_000이 기능은 많은 프로그래밍 언어에서 지원됩니다.
  3. 공통 : 정규식에서 \w단어 문자 및 숫자 ( [a-zA-Z0-9_]) 와 같은 밑줄을 처리합니다 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.