ls가 GLOBIGNORE를 통해 제외된 파일을 계속 표시하는 이유는 무엇입니까?

ls가 GLOBIGNORE를 통해 제외된 파일을 계속 표시하는 이유는 무엇입니까?

파일이 없지만 echo존재합니다 ls -a. 왜?

bojan@hyperion:~$ touch .ignoramus
bojan@localhost:~$ ls -al | grep ignor
-rw-rw-r--  1 bojan bojan     0 Apr 19 19:05 .ignoramus
bojan@localhost:~$ GLOBIGNORE=".ignoramus";
bojan@localhost:~$ echo .i*
.icons
bojan@localhost:~$ ls -al | grep ignor
-rw-rw-r--  1 bojan bojan     0 Apr 19 19:05 .ignoramus
bojan@localhost:~$ echo $GLOBIGNORE
.ignoramus

사람들은 -a표시하고 숨길 뿐이라고 말했지만 GLOBIGNORE에 대해서는 언급하지 않았습니다.

   -a, --all
          do not ignore entries starting with .

ls (GNU coreutils) 8.23
GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)

답변1

설정은 GLOBIGNORE아무런 영향을 미치지 않으며 ls, 신경쓰지 않기 때문에 ls설명서에도 언급되어 있지 않습니다 . 이는 glob 모드에서 일부 파일을 생략하게 만드는 bash의 기능일 뿐입니다.GLOBIGNORElsGLOBIGNORE

를 사용하면 echo .i*bash가 파일을 나열하므로 GLOBIGNORE시작됩니다. 을 사용하면 ls -a파일 ls이 나열되므로 GLOBIGNORE중요하지 않습니다.

GNU ls에는 비슷한 기능이 있습니다. 무시하고 싶은 패턴을 명령줄 옵션으로 전달할 수 있습니다.

ls -a -I .ignoramus

답변2

GLOBIGNORE 변수는 bash의 기능이며 영향을 미칩니다.확장하다문서.

즉, GLOBIGNORE는 glob을 사용할 때만 작동합니다.

glob은 *, ?, [...] 문자를 사용하는 "경로 이름 확장"의 대체 이름입니다.

ls -al또는 simple과 같은 명령은 lsglob의 결과가 아니므로 GLOBIGNORE를 사용하지 않습니다.

그러나 이와 같은 명령은 ls -d *glob을 사용하고 GLOBIGNORE가 작동합니다.

GLOBIGNORE를 설정(또는 설정 해제)하면 두 가지 다른 방식으로 "경로 이름 확장"에 영향을 미칠 수도 있습니다.

GLOBIGNORE가 설정되었으며 비어 있지 않습니다.

  1. 파일 이름 . 이며 .. 항상 무시됩니다.
  2. dotglob 쉘 옵션이 설정되었습니다(점으로 시작하는 파일이 일치함).

GLOBIGNORE 설정 해제

  1. 파일 이름 .'' and..''은 무시되지 않습니다.
  2. dotglob 옵션이 비활성화되었습니다.

관련 정보