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

int*_*der 2 scripting bash

嘿伙计们,我有以下脚本,我只是尝试在其中打印表情符号,但是当我执行脚本时,我看不到表情符号,但是当我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.
Run Code Online (Sandbox Code Playgroud)

PS:我怎么能在这里添加一个shell来运行脚本?我在其他发布的问题上看到过。

编辑 1:在一些评论后更正了代码。

仍然在控制台上得到这个:

在此处输入图片说明

Jde*_*eBP 5

printf '\U1F984\n'

Bourne Again shell 的 4.1 及更早版本不理解\U\u转义内置printf命令格式参数中的序列。要使用它们,您需要 4.2 或更高版本。2011 年 Bourne Again shell 的 4.2 版发行说明中包含了这一新增内容。

或者,使用 Z shell 版本 4.1.1 或更高版本。Z 外壳在printf几年前的 2003 年获得了此扩展。93 Korn 外壳也有此扩展已有一段时间。

您当然可以将代码点转换为 UTF-8 并将 UTF-8 直接打印为八进制编码的八位字节序列,这应该适用于任何未扩展的符合标准的 printf

printf '\360\237\246\204\n'

  • 请注意,这些 `\uXXXX`/`\UXXXXXXX` 首先添加到 GNU `printf`(来自 coreutils 的独立实用程序,而不是 GNU shell 的内置函数)中,然后首先添加到 `zsh 中的 `$'....'` 中`。`$'\u...'`、`$'\U...'` 计划包含在 POSIX 中,但细节尚未完全整理清楚,因为现有实现之间存在显着差异。 (3认同)
  • [$'...'、echo 和 printf 理解 \uXXXX 和 \UXXXXXXXX 转义序列。](https://tiswww.case.edu/php/chet/bash/CHANGES) (2认同)