Bashオートコンプリートはlsとは異なるファイル名を提供します。

Bashオートコンプリートはlsとは異なるファイル名を提供します。

とても奇妙なことが起こりました。太字がひどくてこう書いています。

cp filename.xsl .^?~

はい、そうです。ドット - カラット - 疑問符 - チルダ!真実はフィクションよりも見慣れない。

状況がさらに奇妙になります。私が入力している間

cat .

それからクリックTABすると

./    ../    .^?~

しかし、私がそうすればls -a、私は得ます。

.    ..    .?~

最後に私がやったとき

rm .?~

削除コマンドは、次のメッセージを表示します。

rm: remove write-protected regular file `.\177~'?

正常に削除される前に。カラットの存在が減少するのはなぜですか?

ベストアンサー1

キャレットは通常、押されたctrlキーを表すために使用されるか、または制御文字であるためです。

実際に入力するキーシーケンスは次のとおりです。

cp filename.xsl .ctrl+Vbackspace~Enter

ファイルをホームディレクトリ(~)にコピーしようとしている可能性があります。ctrl+と入力してこの操作を繰り返すことができますVbackspace^?画面に印刷されたものが表示されます。

印刷されていない文字が変換されたファイルを表示できます。C型次のようにエスケープしてください(-b重要なフラグですが、ファイルはドットで始まるので、次のものも必要です-a

$ ls -ab
.  ..  .\177~

それ以外の場合は、単に省略されたためではなく、優先順位以外の文字が で表示されるため-b表示されます。 +を試してから。これは表示されるファイルです。.?~^?touchctrlVEnterfooEnterls?fools -b\rfoo

したがって、入力するとrm .?~一致するものです。これは、?入力した内容が特定の実際の疑問符ではなく単一の文字に一致するワイルドカードとしてシェルによって解釈されるためです。rmエイリアスを使用したので、操作を確認しrm -i、確認するとCスタイルのエスケープコードが表示されます。

おすすめ記事