.
bash가 처리하는 방식에서 (또는 ..) 과 ~
문자의 차이점은 무엇입니까? char를 사용하면 ~
bash는 이를 절대 경로로 확장하지만, (또는..) bash를 사용하면 .
절대 경로로 확장하지 않습니까?
내 비밀번호는 홈 디렉토리입니다. 이제 다음 명령을 실행하면 ( ls '.'
또는 ls.) pwd의 내용이 표시되지만 명령을 실행하면 ls '~'
파일이나 디렉터리가 존재하지 않는다는 오류가 발생합니다. 이는 ~
명령에 전달하기 전에 셸에 의해 확장되도록 되어 ls
있지만 .
그렇지 않습니다. .
특수문자 인가요 ? (또는..) .
이 쉘에서 특수 문자로 처리되어 확장되는 경우는 언제입니까?
답변1
점은 .
쉘의 특수 문자가 아닙니다. .
디렉토리 링크의 모든 속성은 ..
쉘이 아닌 파일 시스템 구조와 관련되어 있습니다. 거기에서도 문자가 아니라 두 가지 특정 이름이 있다는 점에 유의하세요. foo.txt
, .bar
및 ...
는 점으로 시작하는 파일 이름이 glob 및 ls
.
반면에 ~
파일 시스템에서는 일반 문자이지만 셸에서는물결표 확장특별 대우를 해주세요. 따라서 ~
단어 시작 부분에 따옴표가 없는 단어는 현재 사용자의 홈 디렉토리와 ~foo
사용자의 홈 디렉토리로 확장됩니다 foo
.
(물론 셸은 .
와 가 무엇인지 알고 있습니다 ..
. 왜냐하면 현재 작업 디렉토리가 로 표시되는 것이 아니라 로 표시되기 때문 cd ..
입니다 . 또한 문자 및 와는 달리 점은 변수 이름에 영향을 주지 않습니다(예: and are not). )/tmp
/tmp/..
/
_
,
%
-
답변2
~
쉘에 의해 독립형(즉, 인용되지 않은) 홈 디렉토리로 해석됩니다. 참조하면 해석이 멈추기 때문에 일반 변수와 다릅니다.
.
..
파일 시스템의 참조입니다 .
따라서 C 프로그램에서 이를 사용하려고 하면 .
(셸이 없음) 다음과 같이 작동합니다.
#include <stdio.h>
int main(void) {
DIR *d;
struct dirent *dir;
d = opendir("."); /*<---------------See the . for current dir */
if (d) {
while ((dir = readdir(d)) != NULL) {
printf("%s\n", dir->d_name);
}
closedir(d);
}
return(0);
}
~
그리고 , ( ) 로 하려고 하면 d = opendir("~");
동작하지 않습니다.