Unix의 경로 이름 구성 요소에서는 두 문자 만 사용할 수 없습니다. 널 문자는 C (커널 언어)로 문자열을 종료하고 슬래시는 경로 구분 기호로 예약되어 있습니다. 또한 경로 구성 요소는 빈 문자열 일 수 없습니다.
따라서 경로 이름에는 슬래시와 구성 요소의 두 가지 토큰 만 있습니다.
새로운 토큰을 추가하지 않고 상대 경로와 절대 경로의 두 가지 유형의 경로를 지원 한다고 가정합니다 . 또한 이름이없는 루트 디렉토리를 참조하려고합니다 (이름이있는 상위 디렉토리가 없음).
슬래시 만 사용하여 상대 경로, 절대 경로를 나타내고 루트 디렉토리를 참조하는 방법은 무엇입니까?
언어를 확장하는 가장 확실한 방법은 (새로운 토큰 도입 이외의) 새로운 구문을 만드는 것입니다 : 잘못된 구문 인 토큰의 조합에 새로운 의미를 부여하십시오.
슬래시로 시작하는 경로는 의미가 없으므로 "이 경로는 상대 경로가 아니라 절대 경로"라는 표시로 선행 슬래시를 사용하지 마십시오.
슬래시 만 포함하는 경로도 유효하지 않으므로 "루트 디렉토리"라는 의미를 지정하지 마십시오.
절대 경로가 루트 디렉토리에서 검색을 시작하기 때문에이 두 의미는 서로 연결됩니다. 다시 말해서 슬래시가 다음과 같은 의미를 갖는 것으로 간주 될 수 있습니다.
- 루트 디렉토리로 이동하여 슬래시 문자를 사용하십시오.
- 경로에 더 많은 재료가 있으면 상대 경로로 처리하십시오. 그렇지 않으면 완료됩니다.
그런 다음, 끝에 슬래시를 넣을 수도 있습니다. "이 경로는 마지막 경로 구성 요소가 일반 파일이나 다른 유형의 객체가 아닌 디렉토리의 이름임을 나타냅니다. 후행 슬래시는 해당 디렉토리를 다음과 유사하게 나타냅니다. 선행 슬래시가 루트 디렉토리를 나타내는 방식입니다. "
위의 모든 구문을 사용하면 이중 슬래시, 삼중 슬래시 등 할당되지 않은 의미의 구문이 있습니다.
다른 토큰을 소개하고 다르게하는 것이 어떻습니까? 디자이너가 일반적으로 최소한의 접근 방식을 취했기 때문일 수 있습니다. (왜 잘못된 작업을 수행 할 때 ed
편집기에 왜 A 만 표시 ?
됩니까?) 슬래시는 입력하기 쉬우 며 이동이 필요 없습니다. 토큰 유형이 두 개 (컴포넌트 및 슬래시) 인 경로 언어는 기억하고 사용하기 쉽습니다.
또 다른 중요한 고려 사항은 문자열 표현 만 사용하여 경로를 쉽게 조작 할 수 있다는 것입니다. 예를 들어, 새로운 부모 디렉토리에 대한 절대 경로를 "루트"할 수 있습니다 :
OLD_PATH=/old/path
NEW_HOME=/new/home
NEW_PATH="$NEW_HOME$OLD_PATH" /new/home/old/path
주요 달러 기호 또는 기타 다른 방법으로 절대 경로를 표시하면 작동하지 않습니다.
OLD_PATH=^old/path # ^ means absolute path
NEW_HOME=^new/home
# now we need more string kung-fu than just catenation
NEW_PATH="$NEW_HOME/${OLD_PATH#^}"
이러한 유형의 코딩은 유닉스 스타일 경로를 다룰 때 여전히 필요한 경우가 있지만 그 수가 적습니다.
cd /home
하는 것과 동일 하게 해당 디렉토리에 액세스 할 수 있기 때문입니다.cd /home/
/