こんにちは、次のスクリプトがあり、絵文字を印刷しようとしていますが、スクリプトを実行すると絵文字が表示されませんが、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}"'