「Ø」というファイルがありますが、混乱しています。

「Ø」というファイルがありますが、混乱しています。

以前のSolarisサーバーで呼び出されたファイルが見つかりましたが、¬コマンドライン(bash 2.05)でそのファイルと対話する方法は混乱しています。

Øコマンドラインのこのキーとhome同じ機能を持ちます。このボタンを押すと、カーソルが行の先頭に移動します。rm ¬したがって、入力して削除しようとするとrm

vimでファイルを作成してfileØ文字を挿入できました。問題は、すべてのプログラムがこの役割を異なって見ているということです。いくつかの例:

bash-2.05# cat file
¬

bash-2.05# vim file
¬

bash-2.05# vi file
\302\254

bash-2.05# less x
"x" may be a binary file.  See it anyway? 
<C2><AC>

bash-2.05# more file
¬

bash-2.05# ls 
¬

bash-2.05# ls -q 
??

bash-2.05# ls -b 
\302\254

を実行してファイルを削除できましたrm $(cat file)。しかし、私の質問は、コマンドラインに入力してどのように削除できるかということです。動作しません。与えられた16進表現rm \302\254で何をすべきかわかりません。less

コマンドラインにØを挿入する特別な方法はありますか?

あまりにも古いので、複製するのは難しいかもしれませんが、とにかく尋ねると思いました。

ありがとう、パトリック

答え1

文字¬はUnicodeです。コードポイントU+00ACまたは172(10進数)

で表すと、utf82バイトxC2xAC和(16進数)または
およびの8進数値になります。\302\254

これがbashでさまざまな方法でこのような文字を印刷できる理由です。

$ printf '\302\254'         # Add a \n to add a new line.
¬

$ printf '\xC2\xAC'
¬

$ echo -e '\0302\0254'        # Bash echo is special for requiring -e.
¬

$ echo -e '\xC2\xAC'
¬

$ echo $'\302\254'
¬

$ echo $'\xC2\xAC'
¬

または、UNICODE値を直接使用することもできます(コンソールがutf8を使用するように正しく設定されており、[2011年2月27日] Bashバージョン4.2がbash 2.05で機能しない場合のみ):

$ echo $'\u00AC'
¬

$ echo $'\U000000AC'
¬

上記のいずれかの方法が機能します。コマンドの置き換え コマンドに引数として文字を渡しますrm

$ rm "$(printf '\xC2\xAC')"

コンソールが正しく設定されている場合。 - を使用して、ホームキーを使用して画面上の
文字を印刷できます。¬CTRLV

ウィキペディアで

Unixインタラクティブターミナルは、Control-Vを使用して、「次の文字は文字通り処理する必要があります」を意味します(ここでニーモニックは「vは軸を表します」)。

rmspaceCTRLvhome# what you type.
RM ←# what you get.


当然ではないあなたはできますcopy and paste

マウスを使って使用したい文字を選択してください。

left-click just before the character
move the mouse one character to the right
release the mouse left-click

ctrlinsert次にコピーを押します。右クリック(選択ウィンドウが表示されます)を選択する必要がありますcopy

次に、文字を挿入する位置にカーソルを移動します。

そして押しshiftinsertて貼り付けます。

最後の方法では、実際に次のコマンドを書くことができます。

$ rm ¬

答え2

使用:

rm $'\xc2\xac'

UTF-8エンコーディングのUnicode文字は¬bytesで構成され、c2上記のacbash$'...'機能はこれらのバイトを16進形式で入力するために使用されます。

Unicodeをサポートする端末ではこれは必要ありません。rm ¬この回避策は、Unicodeがサポートされていない場合にのみ必要です。

文書

Bashの$'...'機能(2.0に追加され、ksh93からコピーされ、FreeBSDでも利用可能zshmkshsh非常に強力です。からman bash

$ 'string'形式の単語は特別に扱われます。ワードは、ANSI C規格で指定されているように置き換えられたバックスラッシュエスケープ文字を使用して文字列に展開されます。バックスラッシュエスケープシーケンスがある場合は、次のようにデコードされます。

          \a     alert (bell)
          \b     backspace
          \e
          \E     an escape character
          \f     form feed
          \n     new line
          \r     carriage return
          \t     horizontal tab
          \v     vertical tab
          \\     backslash
          \'     single quote
          \"     double quote
          \nnn   the eight-bit character whose value is the octal value nnn (one to three digits)
          \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
          \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
          \UHHHHHHHH
                 the  Unicode  (ISO/IEC  10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex
                 digits)
          \cx    a control-x character

\xHH16進バイトを入力するには、フォーマット(2.02に追加)のみを使用してください。

\uHHHHコピーされたものはzsh4.2にのみ追加されているので機能しませんがbash(またはzshFreeBSD ksh93mksh、最新バージョンではsh現在のロケールがUTF-8文字セットを使用していると仮定すると、次のこともできます。

rm $'\u00AC'

答え3

一重引用符を使用すると、あらゆる種類のシェル拡張を防ぎ、すべてがそのまま動作します。たとえば、rm '¬'ファイルを削除する必要があります。

答え4

どうですか?

rm -i * 

ファイルがあるディレクトリにありますか?

関連情報