나는 기대
compgen -A file -G './tmp/*.sh'
아래의 파일만 표시되지만 tmp/
현재 디렉터리의 모든 파일도 표시됩니다.
나는 열심히 노력했다
compgen -A file -X '!(tmp/*.sh)'
그리고
compgen -A file -X "!(tmp/*.sh)"
그러나 둘 다 결과가 비어 있습니다. 설정 확인:
$ shopt|grep extglob
extglob on
또한 주목할 가치가 있습니다
compgen -A file tmp/*.sh
첫 번째 유효한 후보만 반환됩니다. 그건 그렇고, 이는 기본 행 완성 결과와 정확히 일치합니다.
cp tmp/*.sh[TAB]
그리고
ls tmp/*.sh[TAB]
둘 다 첫 번째 후보로만 확장됩니다.
두 가지 질문:
- 왜?
- 예상되는 결과를 얻기 위해 사용할 수 있는 방법이 있습니까
compgen
?
"예상 결과"는 일치하는 모든 후보를 반환하는 것입니다.ls tmp/*.sh
답변1
@KamilMaciorowski의 의견이 답변을 제공합니다.
내 실수는 파일 이름을 처리할 때 "-A 파일"이 필요하다고 가정한 것입니다. -G 'tmp/*.sh
원하는 결과를 얻으려면 그것을 사용하십시오 .
등 -A
의 옵션이 많아 잘못된 가정이 발생합니다 . 그러나 glob은 파일 이름에만 작동하므로 파일 이름으로 도메인을 사용하면 암시적입니다.file
host
-G