Linuxシェルで「@」を印刷する方法は?

Linuxシェルで「@」を印刷する方法は?

リモートサーバーのコンソールキーボードレイアウトが実際のキーボードと異なる問題が発生しました。

@ブラウザフォーラムに貼り付けるには、手紙をコピーする必要があります。

サーバーはVPNの内部にあり、外部からアクセスできないため、「記号」で検索するだけでは機能しません。

@コピーして貼り付けるためにコンソールから印刷する方法はありますか?単にaを実行しcat@その中にaを表示するよく知られたファイルはありますか? ㅏ閲覧ファイルまたは同様です。

答え1

bashシェルの使用:

echo $'\x40'

POSIXシェルの使用:

printf '\100'

答え2

man asciiディスプレイASCII文字セットを使用し、出力から切り取って貼り付けることができます。

ascii計画9または他のプログラムにプログラムがインストールされている場合は、セクション7:でマニュアルページが必要であることを明示的に指定できますが、man 7 asciiこれは通常必要ありません。)

答え3

Perlを使用している場合は、次の特殊文字を最小限に使用して、印刷可能なすべてのASCII文字を取得できます(二重引用符を使用することもできます)。

shell$ perl -l -e 'print map chr, 32..126'
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

はるかに簡単です(文字とドットのみを使用)。

shell$ perl
print chr for 32..126
^D
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~shell$

答え4

以前に言及されていないいくつかの方法は次のとおりです。

printf  '\x40'
printf  '\u40'
echo -e '\u40'
echo   $'\u40'
echo 40 | xxd -p -r
perl -le 'print chr 64'
python <<<'print chr(64)'
python3 -c 'print(chr(64))'
php -r 'echo chr(64);'

[1] この40値はASCII文字の16進値です@。または6410進数(後で使用)。つまり、16進数()の値で表現または読み取ります\x40。 printfコマンドはそれをこの値のバイトに変換し、コンソールはそれを印刷します。\x40@

そしてこれもUnicode同じ文字のコードポイント値です@。結局のところ、UnicodeコードポイントとASCII文字の値は7F(設計上)最大127(16進数または8進数)まで同じです177

\x40しかし\100(または)とは違いがあります\u40。後者は、オペレーティングシステムまたはコードを実行しているコンピュータで設定されたロケール、言語、または条件に関係なく、常にUnicodeコードポイントを生成します。 while はprintf '\100'スペースを出力します。また、設計上、UNICODEのコードポイントには静的値が割り当てられます。彼らは将来も変わらないと予想されます。つまり、EBCDICベースのシステムでは偶数を生成する\u40必要があります@(例:)。これはASCII値の場合は小さな利得のように見えますが、()はロケールや言語に関係なく\u2225常に生成する必要があるため、より高いコードポイント文字の実用的な利点ですparallel

これに対するサポートは、2000年にGNU printf(スタンドアロンユーティリティ)によって最初に追加されました\uxxxx。その後、2003年にzshのprint/printf/echo/$'...'が登場し、後で他のいくつかのシェルが登場しました。 $ '\ uxxxx'構文はPOSIXに含まれる予定もあります。別のprintf:には4桁の数字が必要ですprintf '\u0040'。 Bashでは、ksh93とzshに1〜4桁の数字が許可されています。 Aには\Uxxxxxxxx最大8桁の16進数を使用する必要があります。

[1]元のアイデアはStéphane Chazelasのコメントから出てきました(現在削除されています)。

関連情報