将表情符号添加到脚本中不起作用

将表情符号添加到脚本中不起作用

嘿伙计们,我有以下脚本,我只是尝试打印表情符号,但是当我执行脚本时,我看不到表情符号,但是当我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}"'

相关内容