Quando usar aspas simples ou duplas na linha de comando do Ubuntu? [duplicado]

3
    

Esta pergunta já tem uma resposta aqui:

    
  •              Diferenças entre doublequotes “”, singlequotes '' e backticks '' na linha de comando?                                      6 respostas                          
  •     

Existe uma regra simples para entender quando usar aspas na linha de comando do Ubuntu e quando aspas simples e quando aspas duplas são necessárias?

Por exemplo, como explicar a diferença aqui:

$ echo $'a\naa\nac\nb\ncc\tdd\ne\se'
a
aa
ac
b
cc  dd
e\se
$

e

$ echo $"a\naa\nac\nb\ncc\tdd\ne\se"
a\naa\nac\nb\ncc\tdd\ne\se
$
    
por DK Bose 11.03.2014 / 04:04

4 respostas

2

No seu caso, há uma sintaxe especial de cotação usada, a saber, $'...' e $"..." . Parece que essa sintaxe veio do shell Korn para Zsh e Bash, e agora está em POSIX (veja, por exemplo, a linha "expandir sequências" no link ). Esta sintaxe não é mencionada nas respostas para Diferenças entre doublequotes "", singlequotes '' e backticks ´ ´ na linha de comando? .

Detalhes sobre esta sintaxe podem ser encontrados na manpage do bash (1):

   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.  Backslash escape sequences, if present, are 
   decoded as follows:
              \a     alert (bell)
              \b     backspace
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \     backslash
              \'     single quote
              \"     double quote
              \nnn   the eight-bit character whose value is the octal value 
                     nnn (one to three digits)
              \xHH   the eight-bit character whose value is the hexadecimal 
                     value HH (one or two hex digits)
              \uHHHH the Unicode (ISO/IEC 10646) character whose value is 
                     the hexadecimal value HHHH (one to four hex digits)
              \UHHHHHHHH
                     the Unicode (ISO/IEC 10646) character whose value is the 
                     hexadecimal value HHHHHHHH (one to eight hex digits)
              \cx    a control-x character

       The expanded result is single-quoted, as if the dollar sign had not
       been present.

       A double-quoted string preceded by a dollar sign ($"string") 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.

Isso também significa que uma variável será expandida em $"..." , mas não em $'...' . Por favor, compare:

$ echo 'I am using\t$SHELL.\n'
I am using\t$SHELL.\n
$ echo $'I am using\t$SHELL.\n'
I am using  $SHELL.

$ echo "I am using\t$SHELL.\n"
I am using\t/bin/bash.\n
$ echo $"I am using\t$SHELL.\n"
I am using\t/bin/bash.\n

No primeiro exemplo, nem a variável $SHELL nem as escapes de barra invertida são expandidas. No segundo exemplo, os exemplos de barra invertida são expandidos, mas não a variável. O terceiro e o quarto exemplos dão resultados idênticos: somente a variável é expandida.

O formulário $'...' pode ser útil para atribuir conteúdo com meta-caracteres como \t ou \n para variáveis. No entanto, não consegui encontrar uma aplicação para o formulário $"..." .

    
por Dubu 11.03.2014 / 11:36
2

Normalmente, aspas duplas ("") são usadas para imprimir o valor de qualquer variável e aspas simples são usadas para imprimir a string exata.

Por exemplo, você tem uma variável foo que contém pwd como valor.

foo=pwd

agora, quando você faz: -

  • echo "$ foo" - imprimirá o valor da variável foo, por exemplo, pwd
  • echo '$ foo' - imprimirá $ foo (string exata passada entre aspas simples Além disso, as citações anteriores são usadas na linha de comando / script de shell, que normalmente é usado para executar o comando armazenado na variável.
  • echo '$foo ' imprimirá seu diretório atual, ou seja, a saída do comando pwd .
por Abhinav Chittora 11.03.2014 / 05:25
1
$ echo $'a\naa\nac\nb\ncc\tdd\ne\se'
a
aa
ac
b
cc  dd
e\se
$

No exemplo acima, \n representa a nova linha. Para esta sintaxe $'code\ncode1' , o terminal primeiro imprime a code na primeira linha e, na linha seguinte, imprime code1 .

Portanto, no exemplo, o terminal primeiro começa a executar o code.prints a na 1ª linha, depois se move para o próximo caractere. O próximo caractere é \n , o que representa uma nova linha.aa em nova linha. E o intérprete bash executa assim. Ao ver este código cc\tdd , ele imprime cc e depois de algum espaço, imprime dd .Por \t representa tab . imprime e\se asusual porque não há valor para \s .

$ echo $"a\naa\nac\nb\ncc\tdd\ne\se"
a\naa\nac\nb\ncc\tdd\ne\se
$

echo $"text" .Neste modo, o comando echo exibe o que estiver dentro de $"" . Não será possível analisar.

echo $'code' - Analisa o código.

echo $"code" - Se o código contiver a variável dollar, ele deverá ser expandido, caso contrário, não será para \ n \ t e será impresso todo o conteúdo como está.

    
por Avinash Raj 11.03.2014 / 08:31
1

Verifique a resposta aceita em Diferenças entre doublequotes "", singlequotes '' e backticks ´´ na linha de comando?

Por exemplo, considere que a variável foo contém uname.

echo "$foo" outputs uname, subtitute variables in text.
echo '$foo' outputs $foo, the exact string (only ' should be escaped \').
echo '$foo' outputs Linux, execute the content of the variable and echo outputs it.

Aqui também há alguns guias de linha de comando

    
por Ahmadgeo 11.03.2014 / 04:09