Bash는 파일 이름 확장을 언제 수행해야 하는지 어떻게 알 수 있습니까?

Bash는 파일 이름 확장을 언제 수행해야 하는지 어떻게 알 수 있습니까?

를 입력하면 ssh-copy-id -i ~/.ssh/파일 Tab이름 확장자가 나열됩니다 ~/.ssh.

ssh-copy-id플래그 없이 -ithen 을 입력하면 파일이 확장 Spacebar되지 않습니다 .Tab

ssh-copy-id -x, Spacebard, Tab(유효하지 않은 플래그임에 유의 ) 를 입력해도 -x파일이 확장되지 않습니다.

Bash는 입력 후 파일 확장을 어떻게 "알"까요 -i? ssh-copy-idBash가 이를 수행할 수 있도록 프로그램을 프로그래밍해야 합니까? 파일 이름 확장자에 대한 이 페이지와 다른 페이지를 읽었지만 내 질문에 대한 답을 찾을 수 없습니다. https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html

히트 버전: GNU bash, version 4.4.20(1)-release (x86_64-pc-linux-gnu)

답변1

탭 완성은 파일 이름 확장과 다릅니다.

탭 완성대화형 Bash 세션을 위한 Bash GNU Readline의 기본 기능입니다. 예를 들어 변수를 완성하고(try echo $SH<TAB>) 파일 이름 명령 인수도 사용합니다.

또한 bash-completion패키지를 설치하면 에 포함된 명령의 완성이 더욱 /usr/share/bash-completion/completions스마트 해집니다 ssh-copy-id. -i플래그에는 파일이 필요 하므로 ssh-copy-id탭을 통해 파일을 완성합니다. 그렇지 않은 경우 -i파일 제공의 의미가 없으므로 완료가 수행되지 않습니다.

completions다시 말하지만, 이는 디렉터리의 명령 에만 작동합니다 . 명령이 파일을 인수로 허용하지 않는 경우 Bash foobarbash-completion .foobar

반면에,파일 이름 확장자이는 POSIX 쉘 동작입니다. 이는 쉘이 대화형인지 여부에 관계없이 발생합니다. 예: 명령에 필요한지 여부에 관계없이 현재 디렉터리의 모든 파일을 확장 ssh-copy-id -x *합니다 .*

관련 정보