O script Bash está imprimindo caracteres errados na minha variável

0

Estou experimentando a seguinte coisa no meu terminal:

spark 0 76 100 | awk '{print substr($0,4,3)}'

saídas:

Se eu fizer:

GRAPH=$(spark 0 25 100 | awk '{print substr($0,4,3)}')
printf "%s" $GRAPH

Eu recebo:

▂%

Mas parece mais com:

Como você pode ver, o % parece estar dentro de uma barra preta ...

Como posso imprimir:

Sem o percentual inesperado na mesma linha?

    
por Mr.Gando 20.02.2013 / 04:24

1 resposta

0

A resposta curta é fazer

printf "%s\n" $GRAPH

Quando você captura a saída de um comando em uma variável de shell com $(…) ou '…' , a última nova linha é removida e printf "%s" … (ao contrário de echo ) não anexa uma nova linha por padrão. Então, quando você diz printf "%s" $GRAPH , você está obtendo o próximo prompt do shell na mesma linha que o printf output.

Em segundo lugar, eu aconselho você a mudar isso para

printf "%s\n" "$GRAPH"

para proteger contra certos personagens engraçados que aparecem em $GRAPH –– e você está claramente obtendo personagens engraçados.

Em terceiro lugar, você diz "o % parece estar dentro de uma barra preta". Parece ser um vídeo inverso , no qual as cores do primeiro plano e do fundo são invertidas. Isso pode ser causado por um ou alguns dos caracteres em $GRAPH . Se tudo o que você fizer até o final do tempo estiver em vídeo inverso, mesmo depois de ter feito as duas etapas acima, tente

printf "%s\n" "$GRAPH"; tput sgr0

tput exerce a funcionalidade específica do terminal; em muitos casos, escrevendo uma string. sgr0 é o nome abreviado da capacidade exit_attribute_mode , que define as cores do primeiro plano e do plano de fundo de volta ao normal (e desativa o sublinhado, pisca e quaisquer outros atributos de exibição suportados pelo terminal).

    
por 20.02.2013 / 19:27

Tags