나는 현재 일련의 디렉토리를 순환하려고 시도하고 있지만 내가 관심 있는 디렉토리만 순환하려고 합니다.
$ 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###*
및 로 시작하는 디렉토리를 제외한 모든 디렉토리를 일치시키고 싶습니다 .p125
p150
패턴을 파이프하면 다음과 같은 결과를 얻습니다.
$ 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_GLOB
zsh에 대한 설정 옵션이 필요합니다.
설정되었는지 확인하려면 다음을 실행하여 setopt
설정된 옵션을 표시하세요.
$ setopt | grep glob
extendedglob
설정되지 않은 경우 를 실행합니다 setopt extended_glob
.
참고: 이로 인해 ~
, ^
및 #
확장할 수 없게 됩니다.
내 문제는 쉘에서 이 옵션을 설정했지만스크립트에서 for 루프를 실행하고 있습니다.스크립트는 실행을 위해 자체 셸을 시작하므로 이 옵션은 설정되지 않습니다.
setopt extendedglob
이 특정 문제를 해결하려면 스크립트 자체를 넣으십시오 .