zsh 스크립트 - 파일 이름 생성 시 패턴을 일치시키지 않는 방법은 무엇입니까?

zsh 스크립트 - 파일 이름 생성 시 패턴을 일치시키지 않는 방법은 무엇입니까?

나는 현재 일련의 디렉토리를 순환하려고 시도하고 있지만 내가 관심 있는 디렉토리만 순환하려고 합니다.

$ ls -d */
cfdpost_statefiles/     p050L0260/  p050L0510/  p060L0390/  p070L0260/  p070L0510/  p092L0390/  p097L0260/  p110L0390/  p131L0325/  p150L0510/  profiles/
ERCOFTAC_TestSettings/  p050L0390/  p060L0260/  p060L0510/  p070L0390/  p084L0510/  p094L0325/  p100L0510/  p125L0510/  p136L0260/  p162L0260/  settings/

p###*및 로 시작하는 디렉토리를 제외한 모든 디렉토리를 일치시키고 싶습니다 .p125p150

패턴을 파이프하면 다음과 같은 결과를 얻습니다.

$ for dir in ./p(125|150)*(/); echo $dir
./p125L0510
./p150L0510

그러나 사용하려고 하면 ^표시됩니다.문서에서:

$ for dir in ./p^(125|150)*(/); echo $dir
zsh: no matches found: ./p^(125|150)*(/)

진행 방법에 대한 아이디어가 있습니까?

답변1

EXTENDED_GLOBzsh에 대한 설정 옵션이 필요합니다.

설정되었는지 확인하려면 다음을 실행하여 setopt설정된 옵션을 표시하세요.

$ setopt | grep glob
extendedglob

설정되지 않은 경우 를 실행합니다 setopt extended_glob.

참고: 이로 인해 ~, ^#확장할 수 없게 됩니다.


내 문제는 쉘에서 이 옵션을 설정했지만스크립트에서 for 루프를 실행하고 있습니다.스크립트는 실행을 위해 자체 셸을 시작하므로 이 옵션은 설정되지 않습니다.

setopt extendedglob이 특정 문제를 해결하려면 스크립트 자체를 넣으십시오 .

관련 정보