Qual é a diferença entre o single '$ string' e o double quoted $ “string” no bash?

9

Eu estava tentando executar uma nova linha usando echo e tentei seguir dois comandos:

  1. Primeiro comando:

    echo $'Hello World\nThis is a new line'
    

    Resposta:

    Hello World
    This is a new line
    
  2. Segundo comando:

    echo $"Hello World\nThis is a new line"
    

    Resposta:

    Hello World\nThis is a new line
    

Minha pergunta é qual é a diferença entre a string envolvida com $' ' vs string empacotada com $" " em bash ' echo ?

    
por Rafaf Tahsin 18.08.2016 / 06:14

2 respostas

10

Como explicado aqui , a sintaxe $'string' especifica uma string no estilo C que inclui caracteres mágicos escapados, como \n para uma nova linha. $"string" é para expansão do I18N, que não tem escapes mágicos.

Observe que eles são diferentes dos mais comuns "string" (cotação fraca) e 'string' (cotação strong).

    
por 18.08.2016 / 06:18
9

O $ no começo da string em:

echo $'Hello World\nThis is a new line'

faz com que as seqüências de escape sejam interpretadas.

Manual de referência de bash [diz]

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. ..
..
The expanded result is single-quoted, as if the dollar sign had not been present.

Mas

echo $"Hello World\nThis is a new line"

é completamente diferente. Este [artigo] em tradução específica para localidade diz:

A double-quoted string preceded by a dollar sign (‘$’) will cause the string to be translated according to the current locale. If the current locale is C or POSIX, the dollar sign is ignored. If the string is translated and replaced, the replacement is double-quoted.

Observação: o IIRC $'string' e $"string" podem não encontrar suporte entre diferentes shells. Não só as pessoas de outros shells olham para elas com curiosidade, mas também debatem se isso poderia ser evitado para a portabilidade do script.

    
por 18.08.2016 / 06:17