【发布时间】:2010-10-14 01:23:42
【问题描述】:
【问题讨论】:
标签: linux bash ascii echo non-ascii-characters
【问题讨论】:
标签: linux bash ascii echo non-ascii-characters
echo -e 'toto\010\010ti' # OUTPUTS: toti
echo -e '\x41' # OUTPUTS: A
echo -e '\u03B1' # OUTPUTS: α
echo -e '\U1F413 <= \U1F1EB\U1F1F7' # OUTPUTS ? <= ??
来自man bash > /BUILTIN/ > /^ *echo/
\0nnn the eight-bit character whose value is the octal value nnn (zero to
three octal 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)
man ascii
【讨论】:
您可以将 ANSI-C 引用与 echo 一起使用:
echo $'\012' # octal
echo $'\x0a' # hex
【讨论】:
至少在我的情况下,我将非 ASCII 表示为 Unicode,但 printf "\x##" 不足以满足我的 2 字节解决方案,因此我改用了这种略有不同的语法:
> printf "\u25ba"
►
【讨论】:
在我的终端上,
printf '\012' >>output.txt
适用于 ascii 字符的八进制表示和相应的十六进制:
printf '\xA' >>output.txt
命令
echo -en '\012' >>output.txt
但是,无法正常运行。只有十六进制似乎可以与 echo -e 一起使用。 -n 从 echo 中删除默认的额外换行符。
【讨论】:
echo -en '\012' >>output.txt 在 Ubuntu 18.04 GNU bash v4.4.19 和 macOS mojave GNU bash 版本 3.2.57 上都非常适合我。如果您使用像 '\0101' (A) 这样的可见字符,则可视化会更容易一些。
使用
echo -e "\012"
【讨论】:
-n 之外的任何标志),如果设置了xpg_echo 标志,即使在 POSIX 模式下也不会受到 bash 的尊重。
\0...。所以如果你想要八进制 101,你可以使用"\0101"。 echo -e 必须有前导零。
如果您关心可移植性,您将放弃 echo 并使用 printf(1):
printf '\012'
【讨论】:
printf '%b' '\012' 获取转义序列,则尊重此类序列,但不尊重其他格式字符串内容。
\NNN,而不是\0...。所以如果你想要八进制 101,请使用 printf '\101',而不是 printf '\0101'