최근에 접한
setopt extended_glob
...확장된 와일드카드를 활성화하려면 다음과 같은 특정 패턴을 제외하는 등 멋진 와일드카드를 많이 추가할 수 있습니다.
ls ^foo*
... ls
일치하는 패턴을 제외하고 현재 디렉터리의 모든 경로에 사용됩니다 foo*
.
setopt extended_glob
나는 당신의 것을 넣는 것을 제안하는 튜토리얼을 찾았 .zshrc
지만 많은 zsh 구성 템플릿이 해당 옵션을 놓치고 옵션은 다음과 같습니다.기본적으로 비활성화됨몇 가지 단점이나 부작용이 있습니까?
extended_glob
아니면 항상 하나에 넣어 활성화하는 것이 전혀 무해합니까 .zshrc
?
답변1
근본적인 문제는 이것이 ^
파일 이름에서 상당히 유효한 문자이므로 이를 포함하는 패턴의 의미가 옵션 설정 여부에 따라 변경된다는 것입니다.
$ touch 'foo' 'bar' '^foo' '^bar'
$ ls ^foo*
^foo
$ setopt extendedglob
$ ls ^foo*
bar ^bar ^foo
표준 쉘은 이것을 일반 문자로 취급하므로 ^
호환성을 위해 이 기능은 기본적으로 비활성화될 수 있습니다.
어떤 옵션이 활성화되어 있는지 기억하는 한, 즉 쉘이 glob을 해석하는 방법을 알고 있는 한 extended_glob
대화식 사용에서 해당 옵션을 활성화하는 것은 문제가 되지 않습니다.
이는 예상하지 못했지만 이상한 파일 이름을 사용하는 스크립트의 경우 문제가 될 수 있지만 비대화형 쉘은 이를 읽을 수 없으므로 .zshrc
거기에 설정하면 작동합니다. 로 설정하지 마십시오 .zshenv
.
ksh 스타일 확장 glob( @(...|...)
등 setopt kshglob
)에는 zsh가 glob 브래킷을 처리하는 방식과 충돌하기 때문에 비슷한 문제가 있습니다. 설정 여부 @(f|b)
에 따라 의미가 다릅니다.kshglob