왜 많은 언어의 식별자 이름에 $가 있습니까?


15

Perl, Awk, Bash, PHP 등과 같은 많은 스크립팅 언어는 식별자 이름 앞에 $ 기호를 사용합니다. 이유를 찾으려고 노력했지만 만족스러운 답변을 얻지 못했습니다.


10
아마도 대부분의 프로그래머의 사업 계획의 마지막 단계 때문에-... 이익!
Oded

2
같은 질문에 대한 SO에 대한 흥미로운 게시물 : 펄 변수 $, %,로 시작해야 할 이유 @ (sigils)
브래드 크리스티

답변:


4

Bourne 쉘 또는 그 전신은 아마도 컨벤션의 기원 일 것입니다. 쉘은 $foo쉘 변수 또는 환경 변수를 참조 하는 데 사용 되는 반면 foo리터럴 문자열 (명령 이름, 파일 이름 또는 다른 명령에 전달 될 단어 일 수 있음)로 간주됩니다.

입력해야하는 양을 최소화하는 것이 중요합니다. 대부분의 프로그래밍 언어에서 입력하는 대부분은 키워드 (작은 고정 집합의)와 선언 된 이름입니다. 그것들의 이름 만 사용하는 것이 합리적입니다. 문자열 리터럴은 구문 상 구별하기 위해 따옴표 (싱글 또는 더블)로 묶습니다.

대화식 셸에서 입력하는 대부분의 항목은 명령 이름과 파일 이름이므로 장식되지 않은 형식이 적합합니다. 변수 이름은 자주 사용되지 않으므로 앞에 오는 것이 변수 $를 구별하는 간단한 방법입니다.

후행 $(숫자 변수 반대) 몇 가지 기본 문자열 변수에 사용하는 아마뿐만 아니라 영감을했다.

$스칼라 변수에 사용 하기위한 Perl의 선택 은 의심 할 여지없이 Bourne 쉘과 같은 쉘에서 영감을 얻었으며, Perl의 초기 버전은 일반적으로 베어 워드를 문자열 리터럴 ( print FOOprint "FOO"동등)로 처리했습니다. 이와 같은 베어 워드 사용은 최신 버전의 Perl에서 더 이상 사용되지 않지만시길은 그대로 유지되며 대부분 다른 종류 의 변수 를 구별하는 데 사용됩니다 . 아마도 Perl이 처음부터 설계 되었다면, 스칼라 변수는 "빈시길"로 표시 될 수 있지만, 그런 일은 일어나지 않았습니다.

. (BTW, awk는 그것은 가지고 sigils을 사용하지 않고 $구하지만 필드 번호를 지칭한다. NF필드의 수이며, $NF마지막 (는 IS NF) 번째 필드).



14

변수 이름의 $ 기호는 "Sigil" 의 특수한 경우 입니다. BASIC 초기 (1964 정도)에서 $는 문자열 변수 이름을 나타내는 데 사용되었습니다. 내 생각에 컴파일러가 기호를 사용하여 나머지 문법과 변수 이름을 쉽게 분리 할 수 ​​있기 때문에 기본에 공통적이기 때문에 사용법이 진행되었습니다. 그러나 이것이 유일하게 사용 된 것은 아닙니다.


2
Basic 의 $for 문자열 (및 %정수)은 접두어가 아닌 접미사였습니다. 적어도 내가 비표준 (비표준) 변형에서 사용했습니다. 물론 컴파일러와 어휘 분석에 관한 한 접미사 대 접두사는 상당히 피상적입니다. 가독성 측면에서 약간의 차이가있을 수 있습니다.
Steve314

BTW-Basic에서 작동하는 한 가지 이유는 매우 제한된 유형의 유형이 있고 사용자 정의 유형이 없으므로 매우 제한된 범위의시길 만 필요했기 때문입니다. Perl 사용법은 다르지만 지금은 오래되었지만 세부 사항을 실제로 기억할 수는 없습니다.
Steve314

@ steve314, 당신은 절대적으로 정확합니다 A $ = ... 이것을 지적 해 주셔서 감사합니다.
NoChance

5

어?

때로는 sigil 이라고도하며 일반적으로 변수 (및 기타)의 이름을 값으로 변환하는 데 사용됩니다.


5

이는 $ 접미사가 문자열 변수를 나타내며 "문자열"로 발음되는 BASIC에서 시작된 것으로 보입니다. 예를 들어, INKEY $ 는 "in key string"으로 발음됩니다.

그러나 왜 달러 기호입니까? 글쎄, $는 문자열의 S와 약간 비슷합니다. 그리고 Wikipedia 에 따르면 :

달러 기호는 컴퓨터 문자 집합에 거의 보편적으로 존재하는 몇 가지 기호 중 하나이지만 컴퓨터 소프트웨어에서 문자 그대로의 의미에는 거의 필요하지 않으므로 $ 문자는 컴퓨터에서 사용되었습니다 많은 목적을 위해 돈과 관련이 없습니다.

(적절하게는, 몇 달러를 더 입력하면이 정보를 얻을 수 있습니다.)


2

왜 안돼? 특히 해석되는 언어의 경우 식별자가 변수가되고 파서 작성이 더 쉽다는 것을 알 수있는 어휘 분석기를 작성하는 것이 더 쉽습니다. 이유에 관해서는 $, 아마도 아마도 전통이 될 것입니다-구문 (Bash? 또는 그 이전 모델)을 사용하여 초기 언어를 만든 사람 중 하나는 어떤 이유로 든 후속 언어가 그것을 채택했습니다.


1
어휘 분석기와 파서를 작성하는 것이 훨씬 쉽지는 않지만 예약어에 대한 요구 사항을 제거합니다.
TomG
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.