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