`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/

関連情報