De alguma forma, aspas curvas entraram no meu código e estou tendo um comportamento inesperado
#!/bin/sh
if [ foo = ‘foo’ ]; then
echo yes
else
echo no
fi
Eu esperaria que isso ecoasse sim, mas em vez disso ecoa não.
De alguma forma, aspas curvas entraram no meu código e estou tendo um comportamento inesperado
#!/bin/sh
if [ foo = ‘foo’ ]; then
echo yes
else
echo no
fi
Eu esperaria que isso ecoasse sim, mas em vez disso ecoa não.
Aspas curvas, ou “aspas inteligentes” são usadas em tipografia e “aspas diretas” geralmente são alteradas automaticamente para aspas curvas por vários programas de processamento de texto. Eles às vezes são chamados de "aspas inteligentes" porque determinam de maneira inteligente em que direção o texto citado está e se curvam em direção a ele.
Aqui está uma tabela das várias citações:
'
"
‘
’
“
”
Em linguagens de programação, no entanto, essas aspas não são intercambiáveis. Aspas retas geralmente são caracteres especiais que executam funções específicas no idioma, enquanto aspas curvas de aparência semelhante não são reconhecidas como especiais. Em vez disso, eles podem produzir erros ou podem ser tratados como caracteres comuns de forma semelhante às letras.
Portanto, no exemplo de código nesta questão, as aspas estão sendo tratadas como seus caracteres literais e não apenas como caracteres de escape do shell e, portanto
'foo'
, não correspondem'‘foo’'
Para evitar esse problema, você deve editar seu código apenas em programas projetados para edição de código e tome cuidado ao copiar o código de qualquer aplicativo de processamento de texto (LibreOffice Word, Wordpad, e-mail etc.), documentos PDF ou fontes de código online.
A distinção visual entre aspas curvas e aspas retas pode ser pequena, mas geralmente é possível perceber a diferença. As citações curvas geralmente aparecem inclinadas ou se assemelham a um 6 ou 9 em miniatura, dependendo da fonte.
Programas como
od
também podem ser usados para dizer a diferença entre as aspas normais ASCII e as aspas curvas Unicode. Por exemplo, o arquivo de texto a seguir tem“foo”
aspas curvas em uma linha e"foo"
aspas retas na outra, e em uma localidade UTF-8, a saída deod -c
no macOS e GNU/Linux mostra as aspas curvas tomando vários bytes enquanto as aspas retas pegue apenas um:(Na superior, o macOS
od
mostra o caractere completo na primeira posição e marca o restante dos bytes do caractere com**
, enquanto na inferior, o GNUod
mostra os valores de todos os bytes dos caracteres, em octal.)