Adicionando emoticons a um script que não está funcionando

0
Hey pessoal eu tenho o seguinte script, onde eu apenas tento imprimir um emoji, porém quando eu executo o script eu não vejo o emoji, mas quando eu faço printf emoji-utf-code do console ele funciona. Estou faltando alguma coisa?

#!/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: Como eu poderia adicionar um shell aqui para que eu pudesse executar o script? Eu já vi isso em outras perguntas postadas.

EDIT 1: código corrigido após alguns comentários.

Ainda recebendo isso no console:

    
por intercoder 05.09.2018 / 11:00

2 respostas

2
printf '\U1F984\n'

As versões 4.1 e anteriores do shell Bourne Again não entendem as sequências de escape \U e \u no argumento format do comando printf interno. Para usá-los, você precisa da versão 4.2 ou posterior. Esta adição está nas notas de lançamento do shell Bourne Again para a versão 4.2, em 2011.

Como alternativa, use o shell Z versão 4.1.1 ou posterior. O shell Z ganhou essa extensão para printf alguns anos antes, em 2003. O shell Korn 93 também possui essa extensão há algum tempo.

É claro que você pode converter o ponto de código em UTF-8 e imprimir o UTF-8 diretamente como uma seqüência de octetos codificados em octal, o que deve funcionar com qualquer padrão em conformidade não-adiada printf :

printf '0764\n'
    
por 05.09.2018 / 14:16
1

você tem um espaço entre sua declaração de variável e seu valor:

UNICORN= '\U1F984\n'

Observe também que echo imprimirá a variável como uma string literal em vez de uma saída esperada do código utf-8

Por fim, é uma boa ideia citar suas variáveis. Isso está funcionando para mim em uma caixa fedora 25:

#!/usr/bin/env bash

UNICORN='\U1F984\n'

printf "${UNICORN}"
printf '\U1F984\n'
    
por 05.09.2018 / 11:06