我试图使用命令转义以下代码echo
,但我不断获得实际的八位字节而不是表情符号。
另外,我在哪里可以找到表情符号的八位字节值?我似乎总能找到UTF-8
价值观。
#!/usr/bin/env bash
UNICORN='\360\237\246\204\n'
FIRE=''
# this does not work when I run the script
printf '\360\237\246\204\n'
printf "Riding a ${UNICORN:Q}"
echo "Riding a ${UNICORN:Q}" #[Fails]: how to extract the actual emoji?
编辑_1:阅读评论后更新代码
#!/usr/bin/env bash
# Note: use hexdump -b to get one-bye octal display
UNICORN_UTF8=$'\360\237\246\204'
printf "U1F525\n"|hexdump -b # [ASK]: How to translate the return value to a valid UTF8 ?
FIRE_UTF8=$'\125\061\106\065\062\065\012'
echo "Riding a ${UNICORN_locale_encoding}"
echo "${UNICORN_UTF8} + ${FIRE_UTF8}"
编辑_2:发布最终代码。这有点管用。
#!/usr/bin/env bash
# Author:
# Usage:
# Note: use hexdump -b to get one-bye octal display of the emoji (needed for when ≠ computers use ≠ commandLine tools)
# Ex: printf "U1F525\n"|hexdump -v -e '"\\" 1/1 "%03o"' ; echo
UNICORN_UTF8=$'\360\237\246\204'
FIRE_UTF8=$'\xF0\x9F\x94\xA5'
LEAVE_SPACE=\^[a-zA-Z0-9_]*$\
echo "Riding an ${UNICORN_UTF8} ${LEAVE_SPACE} out of a ${FIRE_UTF8} ${LEAVE_SPACE} house."
答案1
echo
的语法与标准 C 转义不同,因为它支持printf
// ...awk
$'...'
在标准语法中,您需要在八进制序列(可以有 1 到 3 位数字)前面加echo
一个前导:0
echo '\0360\0237\0246\0204'
请注意,要使用bash
's内置函数,您需要启用该选项²:echo
xpg_echo
$ UNICORN_utf8_printf_format='\360\237\246\204'
$ UNICORN_utf8_echo='\0360\0237\0246\0204'
$ UNICORN_utf8=$'\360\237\246\204'
$ printf "$UNICORN_utf8_printf_format\n"
答案2
$ echo $'\360\237\230\200\012'