파일이 없지만 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의 기능일 뿐입니다.GLOBIGNORE
ls
GLOBIGNORE
를 사용하면 echo .i*
bash가 파일을 나열하므로 GLOBIGNORE
시작됩니다. 을 사용하면 ls -a
파일 ls
이 나열되므로 GLOBIGNORE
중요하지 않습니다.
GNU ls
에는 비슷한 기능이 있습니다. 무시하고 싶은 패턴을 명령줄 옵션으로 전달할 수 있습니다.
ls -a -I .ignoramus
답변2
GLOBIGNORE 변수는 bash의 기능이며 영향을 미칩니다.확장하다문서.
즉, GLOBIGNORE는 glob을 사용할 때만 작동합니다.
glob은 *, ?, [...] 문자를 사용하는 "경로 이름 확장"의 대체 이름입니다.
ls -al
또는 simple과 같은 명령은 ls
glob의 결과가 아니므로 GLOBIGNORE를 사용하지 않습니다.
그러나 이와 같은 명령은 ls -d *
glob을 사용하고 GLOBIGNORE가 작동합니다.
GLOBIGNORE를 설정(또는 설정 해제)하면 두 가지 다른 방식으로 "경로 이름 확장"에 영향을 미칠 수도 있습니다.
GLOBIGNORE가 설정되었으며 비어 있지 않습니다.
- 파일 이름
.
이며..
항상 무시됩니다. - dotglob 쉘 옵션이 설정되었습니다(점으로 시작하는 파일이 일치함).
GLOBIGNORE 설정 해제
- 파일 이름
.'' and
..''은 무시되지 않습니다. - dotglob 옵션이 비활성화되었습니다.