[unix] 백 슬래시 도트는 명령으로 무엇을 의미합니까?

내가 설치 한 소프트웨어는 다음과 같은 내용의 라인을 프로파일에 삽입했습니다.

[ -s "$SOME_FILE" ] && \. "$SOME_FILE"

나는 dot이와 .동의어 라는 것을 알고 source있으므로 이것이 파일을 소싱하는 것 같지만 전에는 본 적이 없다 \.. 다른 일을합니까?

DV 관련 편집 : “백 슬래시 도트”를 검색 ./하면 실행 파일을 호출 할 때 질문 이 표시 man source되고 맨 페이지가 \.나타나지 않는 경우가 있습니다. 무엇을 시도 해야할지 모르겠으므로 질문입니다.

편집 2 : 관련 질문보기



답변

따옴표 이외의 백 슬래시는 “파싱하는 동안 다음 문자를 그대로 해석”을 의미합니다. .파서의 일반적인 문자 이므로 \.와 같은 방식으로 구문 분석되고 .내장을 호출합니다 .(이것은 sourcebash의 동의어입니다).

이 맥락에서 차이를 만들 수있는 경우가 있습니다. 사용자가 호출 별칭 정의 경우 .사전에를 .profile, 그리고 .profile별칭을 확장 쉘에서 읽고있는 (어떤 비난이 대화 형으로 호출 할 때 오직 기본적으로 수행) 다음 .별칭을 트리거,하지만 \.여전히 내장을 트리거 것, 쉘 때문에 어떤 식 으로든 인용 된 단어에 대해 별칭 확장을 시도하지 않습니다.

에 대한 별칭을 만든 후 사용자가 불만을 제기했기 때문에 .로 변경 되었다고 생각합니다 .\..

참고 \.라는 함수를 호출 할 것이다 .. 아마도 함수를 작성하는 사용자는 별칭을 작성하는 사용자보다 지식이 풍부하고 표준 명령을 재정의하는 .profile것이 타사의 코드를 포함시킬 경우 나쁜 아이디어라는 것을 알고있을 것입니다. 그러나 별칭과 함수를 모두 우회하려면을 쓸 수 command .있습니다. 이 스 니펫의 작성자는 command내장 기능 이없는 골동품 껍질에 관심이 있었 거나 인식하지 못했기 때문에이 작업을 수행하지 않았습니다.

그런데, 정의 어떤 에서 별칭은 .profile때문에 나쁜 생각 .profileA는 세션 초기화 스크립트가 아닌 초기화 스크립트. bash의 별칭은에 속해 있습니다 .bashrc.


답변

\.은 “문자 점”, 즉 단지 점이다. 표준 .명령으로 사용됩니다 ( sourcein 와 유사 bash).

POSIX 표준은 이것에 대해 말하기 위해 이것을 가지고 있습니다 (내 강조)

<backslash>인용되지 않은 는 다음을 제외 하고 다음 문자의 리터럴 값을 유지해야 합니다 <newline>. a가 <newline>뒤에 오는 <backslash>경우, 쉘은 이것을 라인 연속으로 해석해야합니다. 그리고 분할 전에 토큰으로 입력을 제거한다 . 이스케이프 처리 는 입력에서 완전히 제거되고 공백으로 대체되지 않으므로 토큰 구분 기호로 사용할 수 없습니다.<backslash><newline><newline>

점 문자 별명을 지정할 수 있습니다.

$ alias .='echo hello'
$ .
hello

하는 수단 \.의 별칭 버전을 사용하지 않는 것입니다 .명령을 하기 때문에 ,

토큰이 분리 된 후 쉘 문법에서 문법 규칙을 적용하기 전에 간단한 명령의 명령 이름 단어로 식별되는 결과 단어를 검사해야합니다. 하여 인용되지 않은 유효한 별칭 이름 인지 .


답변