Mary
디렉토리라고 가정해 봅시다 . 다음 경로는 ~/Mary
상대 경로입니까?
답변1
아니요, 상대적인 것이 아닙니다.
~
별칭이 있는 전체 경로입니다 .
상대 경로는 현재 디렉터리 위치에 상대적인 경로를 설명합니다. 그러나 ~/Mary
현재 어떤 디렉터리에 있든 정확히 동일합니다.
현재 다음으로 로그인되어 있다고 가정합니다.단발/home/Bob
그리고 디렉토리에도 ../Mary
상대 경로의 예가 있습니다 /home/Mary
. 당신이 지금 여기에 있었다면 여전히 /etc/something
그럴 것이지만 ~/Mary
, 지금일 것입니다 ./home/Bob/Mary
../Mary
/etc/Mary
Bash는 ~
이를 특정 방식으로 처리하며 항상 $HOME
.
자세한 내용은 다음을 참조하세요.
답변2
이것이 ~/Mary
시스템 호출(예 open()
: ...)에 지정된 경로인 경우 상대 경로이며 stat()
현재 디렉토리 내의 디렉토리에 Mary
대한 상대 항목 입니다. ~
따라서 현재 디렉터리가 이면 /tmp
이것이 /tmp/~/Mary
파일입니다.
그러나 ~/Mary
물결표 확장을 지원하는 셸(또는 다른 도구)에서 따옴표 없이 사용 하면 ~
변수의 내용 $HOME
(설정된 경우) 으로 대체되고 일반적으로 $HOME
이와 같은 /home/me
내용을 포함하는 절대 경로가 ~/Mary
확장됩니다. 이므로 /home/me/Mary
절대 경로이기도 합니다.
상대 경로로 변경하면 $HOME
(원하지 않는 경우) ~/Mary
쉘은 상대 경로로 확장됩니다.
$ HOME=..; echo ~/Mary
../Mary
이를 다음으로 변경하면 //foo
(또는 홈 디렉토리가 /
홈 디렉토리였던 경우 root
) 확장자는 ~/Mary
더 이상절대 경로 이름어느 것도 아니다상대 경로 이름(적어도 POSIX에서 정의한 대로)
bash
4.0 이전 버전 에서는 다음과 같은 흥미로운 작업도 수행할 수 있습니다.
$ HOME='*' bash-3.2.48 -c 'cd /; echo ~/mount'
bin/mount run/mount
(4.0에서 수정됨)
추가 정보:유닉스&리눅스존재하다
답변3
현명하게 행동하자.
다른 사람들이 말했듯이 이는 별칭이므로 엄밀히 말하면 절대 경로도 아니고 상대 경로도 아닙니다. 실제로는 작업 디렉터리와 아무런 관련이 없기 때문에 절대 경로입니다.
지금 자세히 알아보세요. 운영 체제 수준에서는 별칭이 지원되지 않으므로 모든 절대 경로가 슬래시로 시작한다는 규칙이 유지되고 다른 모든 경로는 상대적입니다. 그러나 애플리케이션은 단순히 이름을 커널에 전달하는 것 이상의 작업을 수행할 수 있습니다. :
의 특수 처리 ~
는 -
일반적이며 애플리케이션에 따라 다릅니다. -
시작 옵션의 경우 상대 경로를 사용하려면 거의 모든 경우에 상대 처리를 강제하도록 미리 설정할 수 있습니다(내가 아는 한 유일한 예외는 ./
또는 일부 구현에서 슬래시가 포함된 호스트 이름입니다). 특정 명령을 감지하는 데 사용되는 URL과 원격 호스트가 식별되며, 앞부분에 있는 명령도 경우에 따라 특별한 의미를 가지지만 이러한 경우는 모두 OS 수준이 아닌 응용 프로그램 수준의 문제입니다.rcp
scp
:
//
거의 모든 쉘(한 가지 예외를 알고 있음)과 많은 Unix 응용 프로그램은 기본 물결표 확장을 지원합니다. 가장 잘 작동할 가능성이 있는 두 가지 물결표 확장은 ~/path
(선두 물결표가 변수의 내용으로 대체되는 경우 $HOME
) 및 ~name/path
( name
사용자 데이터베이스에서 사용자 name
의 홈 디렉토리를 찾는 경우)입니다. 이상한 점은 사용자 데이터베이스에 절대 경로가 포함되어 있지 않거나(이 작업을 수행하지 않음) $HOME
절대 경로가 포함되어 있지 않은 경우(이 작업도 수행하지 않음)입니다. 다른 형태의 물결표 확장도 가능합니다. 예를 들어 Bash는 ~-
다시 애플리케이션 수준에서 이전 작업 디렉터리로 확장합니다(그리고 쉘은 애플리케이션입니다).
답변4
예, ~/Mary는 상대 경로입니다.
문제는 정의 중 하나인 것 같습니다. 공식적인 시스템 전체 정의가 존재하는지 확실하지 않습니다.절대 경로그리고상대 경로
"경로"에는 두 가지 유형이 있습니다.비교적그리고순수한. 절대 경로는 항상 동일한 리소스를 가리킵니다. 상대 경로는 다른 리소스와 관련된 리소스를 가리킵니다.
~를 사용하는 경우 일반적으로 현재 사용자의 홈 디렉터리로 확장하는 데 사용됩니다. 홈 디렉터리는 현재 사용자에 따라 다르므로 ~/Mary는비교적현재 사용자의 홈 디렉터리로 이동합니다.
예를 들어, bob 사용자 ~/Mary
로 확장될 수 있고 /home/bob/Mary
, alice 사용자로 확장될 수 있습니다 /home/alice/Mary
.
추가 예./Mary
현재 디렉터리에 대한 상대
../Mary 상위 디렉터리에 대한 상대
~/Mary 현재 사용자의 홈 디렉터리에 대한 상대
Mary 현재 디렉터리에 대한 상대
/Mary 루트 디렉터리에 대한 상대. 루트 디렉터리는 고정되어 있으므로 절대 경로입니다.
그러나 루트 디렉터리도 현재 호스트에 상대적이라고 주장할 수도 있습니다. 경로에 호스트를 추가하면 호스트 이름:/Mary가 됩니다. 그러나 "호스트 이름"은 호스트 이름이 정의된 시스템에 상대적이므로 이는 여전히 실제 절대 경로가 아닙니다.