"STR: comando não encontrado" ao atribuir um valor a uma variável

9

Digitei as seguintes linhas em um script de shell chamado "test.sh":

#!/bin/bash
echo Hello World
STR=”Hello Again
echo $STR

Depois de chmod para executável, executei o script com ./test.sh. No entanto, recebo a mensagem

./test.sh: line 3  STR: Command not found

O que estou fazendo errado?

Jay Silver
fonte
11
A resposta de terdon resolveu sua pergunta? Caso contrário, pode ser que você acidentalmente tenha espaços em torno de sua atribuição de variável.
Arronical
@ Poker apenas um comentário estilístico baseado em minha sugestão : acho melhor usar o Blockquote para mensagens de erro em vez do bloco de código; no final, isso não é código, mas algum texto que o intérprete do Bash está retornando.
Fedorqui
@fedorqui why? Blocos de citação não preservar a formatação, eles interpretam caracteres especiais (por exemplo *, _, #) como markdown, e são processados de forma diferente por software leitor de tela. Penso que tudo o que é dado ou recebido por um computador deve estar em blocos de código. Você nunca sabe quando o formato exato pode ser relevante. Especialmente quando se lida com coisas como esta, onde o unicode entra em cena.
terdon 6/07
@terdon realmente depende de casos e há até uma solicitação para adicionar formato para logs / avisos / mensagens de erro, o que permite quebra de linha e preserva novas linhas . Para mim, se for apenas uma linha como este caso, prefiro blocos de aspas, pois facilita a compreensão do que é código e do que é erros.
Fedorqui 06/07/19
@fedorqui Acho que devemos levá-lo à meta, mas eu sempre prefiro uma fonte de largura fixa e reprodução exata de formato sempre que postar uma mensagem que seja lida ou produzida por um computador.
terdon 6/07/16

Respostas:

20

O que você está usando para criar esse script? Os caracteres de citação que você possui na sua pergunta estão incorretos. Não são aspas duplas regulares ( "), mas . As citações regulares são:

$ uniprops '"' | head -1
U+0022 "› \N{QUOTATION MARK}

Enquanto os seus são:

$ uniprops '”' | head -1
U+201D ‹”› \N{RIGHT DOUBLE QUOTATION MARK}

Portanto, basta usar aspas regulares e você ficará bem:

#!/bin/bash
echo Hello World
STR="Hello Again"
echo "$STR" ## Get into the habit of ALWAYS quoting your variables as well
Terdon
fonte
Obrigado pela resposta Terdon. As aspas duplas no arquivo estão corretas. A postagem era de um email.
Jay Silver
11
unipropsparece legal. Encontrei a página (esse é o nosso próprio tchrist?). Preciso baixá-lo da fonte ou está disponível em um gerenciador de pacotes em algum lugar? E: Unable to locate package uniprops
TRiG
11
Eu não uso muito o Perl (quase nada). Eu só quero saber mais do que o mínimo sobre Unicode.
TRIG
11
@TRiG bem, no Ubuntu, é tão simples quanto sudo apt-get install cpanminus; sudo cpanm Unicode::Tusslee então você tem o unipropscomando. Obviamente, tchrist escreveu a coisa maldita para que você também pergunte a ele no bate-papo :) #
306 terdon
11
Lamentavelmente me deparo com esse tipo de bobagem o tempo todo. Um sistema wiki específico no meu empregador parece ter o hábito desagradável de traduzir o hífen menos -U + 002D em hífen U + 2010 ( ou similar ). Então coisas como uname ‐aparar de trabalhar: - /. Os clientes de email geralmente têm hábitos nefastos semelhantes - especialmente ao usar a formatação HTML - outro bom motivo para preferir emails em texto sem formatação.
Digital Trauma