`compgen -A file -G './tmp/*.sh`는 예기치 않게 ./ 디렉토리의 모든 파일과 필수 파일을 표시합니다.

`compgen -A file -G './tmp/*.sh`는 예기치 않게 ./ 디렉토리의 모든 파일과 필수 파일을 표시합니다.

나는 기대

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]

둘 다 첫 번째 후보로만 확장됩니다.

두 가지 질문:

  1. 왜?
  2. 예상되는 결과를 얻기 위해 사용할 수 있는 방법이 있습니까 compgen?

"예상 결과"는 일치하는 모든 후보를 반환하는 것입니다.ls tmp/*.sh

답변1

@KamilMaciorowski의 의견이 답변을 제공합니다.

내 실수는 파일 이름을 처리할 때 "-A 파일"이 필요하다고 가정한 것입니다. -G 'tmp/*.sh원하는 결과를 얻으려면 그것을 사용하십시오 .

-A의 옵션이 많아 잘못된 가정이 발생합니다 . 그러나 glob은 파일 이름에만 작동하므로 파일 이름으로 도메인을 사용하면 암시적입니다.filehost-G

관련 정보