unix/linux에서 경로에 있는 연속 슬래시는 일반적으로 단일 슬래시와 동일합니다. 예를 들어.
$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
그러나 어떤 이유로 절대 경로 시작 부분에 있는 두 개의 슬래시는 특별하게 처리됩니다. 예를 들어.
$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
패치의 다른 위치에 있는 다른 연속 슬래시는 잘리지만 처음 두 개의 슬래시는 나중에 그에 관련된 파일 시스템을 탐색하더라도 그대로 유지됩니다.
왜 이런거야? /...와 //... 사이에 차이가 있나요?
답변1
대부분의 경우에,경로에서 반복되는 슬래시는 단일 슬래시와 동일합니다.. 이 동작은 POSIX에서 요구하며 대부분의 애플리케이션이 이를 따릅니다. 예외는 "두 개의 연속 슬래시로 시작하는 경로 이름은 구현에 정의된 방식으로 해석될 수 있습니다"입니다(그러나 ///foo
동일함 /foo
).
대부분의 유니스는 앞에 두 개의 슬래시를 사용하여 특별한 작업을 수행하지 않습니다. 특히 리눅스는 그렇지 않습니다. Cygwin이 하는 일: //hostname/path
네트워크 드라이브(SMB)에 액세스합니다.
실제로, 여기서 보고 있는 것은 Linux가 특별한 작업을 수행하는 것이 아니라 //
bash가 현재 디렉토리를 추적하는 것입니다. 비교하다:
$ bash -c 'cd //; pwd'
//
$ bash -c 'cd //; /bin/pwd'
/
Bash는 예방 조치를 취하고 있으며 운영 체제는 이를 //
특별하게 처리하고 보존할 수 있습니다. 대시도 같은 일을 합니다. Ksh와 zsh는 Linux에서 실행될 때 작동하지 않습니다. (확인하지 않았습니다) 컴파일 시간 설정이 있는 것 같습니다.
답변2
~에서POSIX 사양:
두 개의 연속 슬래시로 시작하는 경로 이름은 구현 정의 방식으로 해석될 수 있지만 두 개 이상의 선행 슬래시는 단일 슬래시로 처리되어야 합니다.
나는 Linux가 bash
미래에 이 동작을 강제로 사용할 경우를 대비하여 이 동작을 유지할 것이라고 생각합니다 .
(Al Viro가 Plan9의 기능을 사용했기 때문에 유지했다는 말을 항상 들었고 Linux에서 해당 기능을 갖고 싶었지만 Plan9 문서에서 찾을 수 없습니다. 하지만 에 있으므로 bash
Al에는 아무것도 없을 수 있습니다. 그것과 관련이 있습니다).
답변3
~에 따르면POSIX 정의, 이중 슬래시(//)로 시작하는 경로는 "... 두 개 이상의 선행 슬래시가 단일 슬래시로 처리되지만 구현 정의 방식으로 해석될 수 있습니다." 다르게 행동하다:
% bash -c 'cd //; pwd'
//
% csh -c 'cd //; pwd'
/
Bash는 디렉토리를 저장하고 있는 것으로 보이며 pwd는 $PWD를 보고하고 csh는 해당 getcwd()
기능을 사용하여 실제 디렉토리를 가져오는 것 같습니다.