スクリプトに絵文字を追加しても機能しません

スクリプトに絵文字を追加しても機能しません

こんにちは、次のスクリプトがあり、絵文字を印刷しようとしていますが、スクリプトを実行すると絵文字が表示されませんが、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:スクリプトを実行するためにここにシェルを追加するにはどうすればよいですか?他の投稿された質問で見たことがあります。

編集1:いくつかのコメントの後にコードが修正されました。

それでもコンソールからこれを得ています:

ここに画像の説明を入力してください。

答え1

printf '\U1F984\n'

Bourne Againシェルバージョン4.1以前は、組み込み\Uコマンド\uのフォーマットパラメータのエスケープシーケンスを理解していませんprintf。これを使用するにはバージョン4.2以降が必要です。この追加は、Bourne Again シェルバージョン 4.2 の 2011 リリースノートに含まれています。

または、Zシェルバージョン4.1.1以降を使用してください。 Zシェルはprintf数年前の2003年にこの拡張を受けました。 93 Kornシェルにもしばらくこの拡張が適用されました。

もちろん、コードポイントをUTF-8に変換し、UTF-8を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 -CO -E 'say "\N{U+1F984}"'

関連情報