스크립트에 이모티콘을 추가해도 작동하지 않습니다

스크립트에 이모티콘을 추가해도 작동하지 않습니다

안녕하세요 여러분, 다음 스크립트가 있고 이모티콘을 인쇄하려고 하는데 스크립트를 실행할 때 이모티콘이 표시되지 않지만 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.

추신: 스크립트를 실행하기 위해 여기에 쉘을 추가하려면 어떻게 해야 합니까? 다른 게시된 질문에서 본 적이 있습니다.

편집 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}"'

관련 정보