`ls -l ~~`(물결표 2개) + 탭은 ~~로 시작하는 디렉터리를 표시하지 않지만 사용자는 표시합니다.

`ls -l ~~`(물결표 2개) + 탭은 ~~로 시작하는 디렉터리를 표시하지 않지만 사용자는 표시합니다.

bash셸 에서 ls -l ~~+가 + Tab로 시작하는 디렉터리를 표시하지 않고 ~~사용자를 표시하는 이유는 무엇입니까? (모든 사용자들).

이것은 ls -l단지 예일 뿐입니다. 아무 디렉토리에나 ~+를 입력하면 Tab사용자 목록이 표시됩니다.

답변1

~확장되도록 설계된 Bash에서 사용할 수 있는 구문 설탕입니다 $HOME. Bash 완성에는 과거에도 많은 문제가 있었고 아직 개발 중입니다. 예를 들어 줄 바꿈이나 별표와 같은 특수 문자가 포함된 많은 파일 이름을 자동 완성하는 데 실패했으며 또 다른 특이한 점을 발견한 것 같습니다.

내 C-foo는 충분히 강력하지 않지만, 당신이 찾고 있는 답이 바로 모퉁이를 돌면 나올 것 같습니다

/* We aren't done yet.  We also support the "~user" syntax. */

존재하다lib/readline/complete.c

답변2

Bash의 경우 man readline설명은 다음과 같습니다.

Completing
  complete (TAB)


Attempt to perform completion on the text before point.
The actual completion performed is application-specific.  

Bash, for instance, attempts completion treating the text as a 

variable (if the text begins with $), 
username (if the text begins with ~), 
hostname (if the text begins with @), or 
command (including aliases and functions) in turn.  

If none of these produces a match, filename completion is attempted.

사용자 이름 완성은 에 의해 실행될 수도 있습니다 M-~.


...및 기본 파일 이름 완성 M-/( Esc, /또는 Alt-/)

]# touch '~~ van tilde'
]# ls ~~\ van\ tilde 

(그리고 ls ~~Esc/)


마치다그리고확장혼동하지 마십시오.


그 후 touch \~ftp나는 ~f+TAB다음을 얻습니다.

\~ftp/이것도 아니다. 백슬래시는 bash가 파일을 인식함을 나타내며 슬래시는 /srv/ftp/.

관련 정보