표시되는 이유는 무엇입니까 이 사용하여 오류{1..9}에 zsh?
문제
나는 다음 코드를 실행
zgrep -c compinit /usr/share/man/man{1..9}/zsh*
나
zsh: no matches found: /usr/share/man/man2/zsh*
이것은 이상 때문에,다음과 같은 작
echo Masi{1..9}/masi
이것은 나에게 그 문제가 될 수 있습 버그에서 Zsh.
은 위에서 버그 Zsh{1..9}?
해결책
버그가 아니며 단어 안에서 잘 작동합니다. 당신이 여기에있는 문제는 그 것입니다 {1..9}
와일드 카드 표현이 아닙니다 *
이다; Echo 예제에서 알 수 있듯이 반복적 인 확장입니다. 따라서 ZGREP 예제는 각 대체 버전을 명령 줄에 입력 한 것과 정확히 동일하며 MAN2의 ZSH로 시작하는 사람 페이지가 없으므로 오류가 발생합니다. (브레이스 시퀀스 확장과 본질적으로 관련이있는 것이 아니라 일치를 찾지 못한 경우 오류가 발생합니다.)
반면에 이것을했다면 :
zgrep -c compinit /usr/share/man/man[1-9]/zsh*
당신은 당신이 기대하는 결과를 얻을 것입니다 [1-9]
정상적인 와일드 카드 표현입니다.
다른 팁
에 zsh 하려는 경우,범위를 사용하여 파일 이름에서,zle 제공 <1-n>
에 실제 어떤 이름을 확장할 수 있습니다.는 말을하는 것입니다:
$ touch a0b a1b a5b a7b
$ print a<0-100>b
다음 <Tab>
오른 최종 후 b
당신을 떠날 것으로 print a0b a1b a5b a7b
확장 라인에 있습니다.
에 대한 다른 모든 의도와 목적에도 전체 범위에 요구 사항,파일과 스크립팅을 사용하여-내가 이것을 표현을 사용하여 오히려 간결한 관용 zsh 루프로:
for n ({1..50}); do print $n; done
할 수 있 프로세스 전체 시퀀스 범위의 번호 1~50:)을 할 수 있는 유용한 모든 종류의 것으로,같은 파일 컬렉션하는 아직 존재하지 않:
arr=($(for n ({1..50}); do print /my/path/file$n.txt; done)) && print $arr[33]
제휴하지 않습니다 StackOverflow