내 홈 디렉토리로 CD를 이동하고 다음을 입력합니다.
ls *bash*
"bash"가 포함된 파일 목록이 표시될 것으로 예상됩니다. 그러나 그렇지 않습니다.
그러는 동안 타이핑을 하다가
ls .bash*
일하다.
문서에 따르면 는 *
모든 문자를 나타냅니다. 그렇죠? 하지만 .
이 경우는 그렇지 않은 것 같습니다. 뭐가 문제 야?
답변1
셸 dotglob
옵션은 다음을 제어합니다.
$ shopt -s dotglob
$ ls *bash*
.bash_history .bash_logout .bashrc
대부분의 최종 사용자는 도트 파일에 대해 걱정할 필요가 없고 중요한 홈 디렉토리 파일(예: .config
) 을 실수로 삭제하기 쉬울 수 있으므로 기본적으로는 사용성/보안 조치로 활성화되어 있지 않습니다 .ssh
.
답변2
대부분의 쉘은 "."로 시작하는 "*" 문자와 일치하지 않습니다. 역사적인 이유로 문자(예: "."로 시작하는 파일은 숨겨진 것으로 간주되고 "." 및 ".."는 디렉터리를 나타냄)
따라서 ls
.bashrc는 표시되지 않지만 ls -a
모든 파일은 표시됩니다. 마찬가지로 ls *
"."으로 시작하는 파일을 제외한 모든 파일이 확장됩니다. 특징.
shopt -s dotglob
"*"도 선행 "." 문자와 일치해야 한다고 bash에 알리려면 이 동작을 변경하세요 . 그 후에는 ls *
.bashrc도 표시됩니다.
답변3
*
그 이유는 선행 점이 "파일 숨기기"에 대한 규칙이고 파일 와일드카드( "임의의 모든 문자" 및 ?
"임의의 한 문자" 및 기타 몇 가지 문자 의 이름)가 명시적으로 선행 점을 제외하기 때문입니다. "문서 숨기기"를 의미하기 때문입니다.
작성하면 ls -l .*
일치 하지만 특수 숨겨진 파일 및 디렉터리 .bashrc
도 일치하므로 숨겨진 파일을 표시하려면 다음이 필요합니다..
..
ls -ld .*
ls -l .[^.]*
ls -A | grep bash
ls -A *bash*
이 옵션이 적용되기 전에 .bashrc
파일 일치가 완료되었으므로 표시되지 않습니다 .-A
파일 와일드카드가 숨겨진 파일을 처리하는 방식을 변경하려면 shopt -s dotglob
셸에서 테스트하거나 .bash_profile 또는 .bashrc에 넣어 항상 작동하도록 하면 됩니다.