방금 동료가 이상한 점을 지적했는데 가능한 설명이 무엇인지 궁금합니다.
내가 시도한 시스템에서 cd /', 'cd //' 및 'cd ///'는 모두 디렉터리를 파일 시스템 루트로 변경하는 효과가 있습니다. 그러나 'cd //;pwd'와 'cd ///;pwd'는 '/' 응답을 반환하지만 'cd //;pwd'는 다른 경우와 마찬가지로 파일 시스템 루트임에도 '//'를 반환합니다.
무엇을 제공합니까?
답변1
일부 시스템에서는 이중 슬래시를 사용하여 네트워크의 호스트 이름을 나타냅니다. 예를 들어,
//host/usr/bin
POSIX는 설명에서 이 사용법을 인식합니다.cd
:
구현이 더욱 단순화될 수 있습니다.코파스선행하지 않는 후행 문자를 제거하여
<slash>
문자, 선행하지 않는 여러 연속 문자를 단일 문자로 바꿉니다.<slash>
, 교체삼또는 여러 명의 주요 캐릭터와 하나의<slash>
. 만약, 정규화의 결과로,코파스변수가 비어 있으며 추가 단계가 필요하지 않습니다.
예를 들어 Apollo 워크스테이션은 이 작업을 수행합니다(참조://, # 등을 사용하는 이유는 무엇입니까?Tim Berners-Lee의 FAQ를 참조하세요.
답변2
pwd
pwd
내 시스템에는 내장된 소스 bash
와 /usr/bin/pwd
GNU coreutils의 두 가지 가능한 소스가 있습니다 . ( cd //; pwd
쉘 내장을 사용하여 ) 발행 하면 //
. 루트 목차).cd //; /usr/bin/pwd
/
ls
따라서 대답은 두 가지 다른 개념, 즉 작업 디렉터리에 대한 셸의 개념과 실제 프로세스 CWD를 포함하는 것으로 보입니다. 내장된 pwd
쿼리는 전자에 대해 쿼리하는 반면 /usr/bin/pwd
(및 다른 바이너리)는 후자에만 액세스할 수 있으며 전자만이 이에 대해 알고 있습니다 //
. 셸의 작업 디렉터리 개념이 /
와 을 구별하는 이유 //
와 그 의미는 //
모르겠습니다.
편집: 일부 검색 결과가 나왔습니다.이 문제, 이는 몇 가지 단서를 제공합니다. 분명히 이 이상한 동작은 표준 내에 있지만 여전히 이상합니다.