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"

답변2

$ echo $'\360\237\230\200\012'

관련 정보