echoを使用すると、変数をエスケープするのに問題があります。

echoを使用すると、変数をエスケープするのに問題があります。

コマンドを使用して次のコードをエスケープしようとしていますが、echo絵文字の代わりに実際のオクテットが引き続き表示されます。

また、絵文字のオク​​テット値はどこで確認できますか?私はいつも価値を探しているようですUTF-8

#!/usr/bin/env bash

UNICORN='\360\237\246\204\n'
FIRE=''

# this does not work when I run the script
printf '\360\237\246\204\n'
printf "Riding a ${UNICORN:Q}"  
echo "Riding a ${UNICORN:Q}" #[Fails]: how to extract the actual emoji? 

編集_1:コメントを読んだ後のコードの更新

#!/usr/bin/env bash
# Note: use hexdump -b to get one-bye octal display

UNICORN_UTF8=$'\360\237\246\204'


printf "U1F525\n"|hexdump -b  # [ASK]: How to translate the return value to a valid UTF8 ?

FIRE_UTF8=$'\125\061\106\065\062\065\012'

echo "Riding a ${UNICORN_locale_encoding}"
echo "${UNICORN_UTF8} + ${FIRE_UTF8}"

編集_2:最終コードを公開します。この種の作品です。

#!/usr/bin/env bash

# Author:
# Usage:
# Note: use hexdump -b to get one-bye octal display of the emoji (needed for when ≠ computers use ≠ commandLine tools) 
# Ex: printf "U1F525\n"|hexdump -v -e '"\\" 1/1 "%03o"' ; echo 

UNICORN_UTF8=$'\360\237\246\204'
FIRE_UTF8=$'\xF0\x9F\x94\xA5'
LEAVE_SPACE=\^[a-zA-Z0-9_]*$\

echo "Riding an ${UNICORN_UTF8} ${LEAVE_SPACE} out of a ${FIRE_UTF8} ${LEAVE_SPACE} house."

ベストアンサー1

echoprintfの構文は// ...をサポートするという点で標準Cエスケープとは異なります。awk$'...'

標準構文では、8進数シーケンス(1〜3桁)の前にechoリーダーを追加します。0

echo '\0360\0237\0246\0204'

bashの組み込み機能を使用するには、このオプション²を有効にする必要があります。echoxpg_echo

$ UNICORN_utf8_printf_format='\360\237\246\204'
$ UNICORN_utf8_echo='\0360\0237\0246\0204'
$ UNICORN_utf8=$'\360\237\246\204'
$ printf "$UNICORN_utf8_printf_format\n"

おすすめ記事