Por que essas duas variantes de comando, que são semelhantes, fornecem saídas diferentes?

4

Comando 1:

$ rm hello.txt 2>/dev/null || { echo “Couldn’t delete hello.txt” }
"Couldn't delete hello.txt"

Comando 2

$ rm hello.txt 2>/dev/null || { echo 'Couldn’t delete hello.txt' }
Couldn't delete hello.txt

Observação: hello.txt não existe no diretório atual.

    
por Vedasheersh Boorla 26.11.2016 / 08:08

2 respostas

13

O primeiro comando

rm hello.txt 2>/dev/null || { echo “Couldn’t delete hello.txt” }

contém os caracteres <U+201C> (MARCA DE COTAÇÃO DUPLA ESQUERDA), <U+2019> (MARCA DE COTAÇÃO SIMPLES DIREITA) e <U+201D> (MARCA DE COTAÇÃO DUPLA DIREITA) que não são especiais para o shell e são emitidos como tal.

O segundo comando

rm hello.txt 2>/dev/null || { echo 'Couldn’t delete hello.txt' }

contém uma string entre aspas simples; o caractere entre n e t é novamente <U+2019> , o que não é especial para o shell.

    
por 26.11.2016 / 08:42
0

O par “” é chamado de citações inteligentes . Da mesma forma, seu em Couldn’t também é uma frase inteligente.

Essas são diferentes das citações normais, no sentido de que elas são diferenciadas entre o início e o fim da parte de cotação. Eles não têm significado na maioria (se não em todos) das linguagens de programação / script que eu conheço e são iguais aos outros caracteres Unicode.

Portanto, o seu primeiro echo na verdade não tem nenhuma citação e o eco receberá essas palavras como argumentos separados.

    
por 26.11.2016 / 17:47

Tags