嘿伙计们,我有以下脚本,我只是尝试打印表情符号,但是当我执行脚本时,我看不到表情符号,但是当我printf emoji-utf-code
从控制台执行时,它可以工作。我错过了什么吗?
#!/usr/bin/env bash
UNICORN='\U1F984\n'
# this does not work when I run the script
printf ${UNICORN}
printf '\U1F984\n'
echo "Riding an ${UNICORN}"
# but when I type the printf command with the UTF-8 code in the console it works.
PS:如何在此处添加 shell 以便运行脚本?我在其他发布的问题上看到过它。
编辑1:经过一些评论后更正了代码。
仍然在控制台上得到这个:
答案1
printf '\U1F984\n'
版本 4.1 及更早版本的 Bourne Again shell 不理解\U
内置\u
命令的格式参数中的转义序列printf
。要使用它们,您需要 4.2 或更高版本。此添加内容包含在 2011 年 Bourne Again shell 版本 4.2 的发行说明中。
或者,使用 Z shell 版本 4.1.1 或更高版本。 Z shell 早在几年前printf
的 2003 年就获得了这种扩展。93 Korn shell 也已经获得了这种扩展一段时间。
当然,您可以将代码点转换为 UTF-8 并将 UTF-8 直接打印为八进制编码的八位字节序列,这应该适用于任何未扩展的标准一致性printf
:
printf '\360\237\246\204\n'
答案2
使用该-e
选项echo
:
$ UNICORN='\U1F984'; THUMBS_UP='\U1F44D'; echo -e "Riding an ${UNICORN} (${THUMBS_UP})"
Riding an
答案3
变量声明和它的值之间有一个空格:
UNICORN= '\U1F984\n'
另请注意,echo
会将变量打印为文字字符串,而不是 utf-8 代码的预期输出
最后,引用变量是个好主意。这在 Fedora 25 盒子上对我有用:
#!/usr/bin/env bash
UNICORN='\U1F984\n'
printf "${UNICORN}"
printf '\U1F984\n'
答案4
使用perl:
perl -CO -E 'say "\N{U+1F984}"'