zsh의 탐욕스럽지 않은(확장된) 글로브

zsh의 탐욕스럽지 않은(확장된) 글로브

탐욕스럽지 않은 와일드카드를 사용하고 싶지만 인터넷 검색 결과 이것이 지원되지 않는 것으로 나타났습니다. 그렇습니까? 그렇다면 왜 이런 일이 발생합니까?

^ff* ^open예를 들어 이전에 재생한 mp3를 여는 등 기록 확장에 탐욕스럽지 않은 글로브를 사용하고 싶습니다 .

답변1

Zsh에는 탐욕스럽지 않은 와일드카드가 없습니다. 탐욕스럽지 않은 일치를 수행하기 위해 내가 생각할 수 있는 유일한 장소는 ${VAR#PATTERN}매개변수 대체 형식으로 접두사를 제거할 때 입니다 ${VAR%PATTERN}( 및 를 사용한 탐욕스러운 일치와 반대 ${VAR##PATTERN}).${VAR%%PATTERN}

탐욕스럽지 않은 와일드카드를 사용하는 패턴을 이를 사용하지 않는 패턴으로 변환하는 것은 항상 가능하지만 변환은 어려울 수 있으며 최악의 경우 결과 크기가 원래 크기에 비해 기하급수적으로 커집니다. 탐욕적이지 않은 일치가 편리한 일반적인 예는 숫자 범위와 그 뒤에 다른 항목을 일치시키려는 경우입니다. 예를 들어 <1-42>*이것은 일치하기 43a때문에 일치합니다 . 해결 방법은 입니다 . 수행하려는 작업에 따라 접두사 또는 접미사 대체를 사용하도록 준비하거나 다른 관점에서 문제에 접근하는 등 다른 방법이 더 쉬울 수 있습니다.<1-42>4<1-42>([^0-9]*)#

명령의 기록 확장을 변경하려는 사용 사례의 경우 예제보다 한 문자 더 짧고 특정 예제에서 더 안정적인 다른 접근 방식이 있습니다. 대신 를 사용하여 명령줄의 어느 위치에서나 ^ff* ^open일치시킬 수 ff있으며 인수에 공백이 포함되지 않은 경우에만 작동합니다.

open !ff:*

이는 ff명령줄의 시작 부분에만 일치합니다( !?ff어디에서나 일치함).

관련 정보