我遇到一个问题,远程服务器的控制台键盘布局与我的物理键盘不同。
我需要复制一封信@
才能粘贴到浏览器论坛中。
服务器位于 VPN 中,无法进行外部访问,因此简单地通过谷歌搜索“at 符号”是行不通的。
有什么技巧可以@
在控制台中打印出来以便我可以复制并粘贴它吗?是否有一个众所周知的文件可以简单地执行 acat
并@
在其中显示 a ? A自述文件或类似的。
答案1
使用 bash shell:
echo $'\x40'
使用 POSIX shell:
printf '\100'
答案2
您可以使用man ascii
显示 ASCII 字符集并从该输出中剪切粘贴。
(如果您ascii
安装了 Plan 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 字符的十六进制值@
。或64
十进制(稍后使用)。即以十六进制 ( ) 值表示\x40
或读取。命令 printf 将其转换为该值的字节,并且控制台打印一个.\x
40
@
而这也是统一码相同字符的代码点值@
。碰巧的是,Unicode 代码点和 ASCII 字符值在 127(十六进制7F
或八进制)以内完全相同(根据设计)177
。
\x40
然而, (或\100
) 和 之间存在差异\u40
。后者将始终生成 UNICODE 代码点,无论运行代码的操作系统或计算机设置什么区域设置、语言或条件。 whileprintf '\100'
会输出一个空格。而且,按照设计,UNICODE 中的代码点已被指定为静态值。预计未来它们不会改变。简而言之,a\u40
应该@
在基于 EBCDIC 的系统上生成偶数(例如)。对于 ASCII 值来说,这似乎是一个很小的增益,但对于更高的代码点字符来说,这是一个真正的优势,因为无论使用哪种语言环境或语言,\u2225
都应该始终生成parallel
( )。∥
2000 年,GNU printf(独立实用程序)首次添加了对它的支持\uxxxx
。然后是 2003 年 zsh 的 print/printf/echo/$'...' 以及后来的一些其他 shell。 $'\uxxxx' 语法甚至计划包含在 POSIX 中。您需要独立 printf: 中的 4 位数字printf '\u0040'
。在 bash 中,允许使用 1 到 4 位数字的 ksh93 和 zsh。 A\Uxxxxxxxx
最多需要使用 8 个十六进制数字。
[1]最初的想法来自 Stéphane Chazelas 的评论(现已删除)