Eu tenho esse script chamado test.sh:
#!/bin/bash
STR = "Hello World"
echo $STR
quando corro sh test.sh
, recebo o seguinte:
test.sh: line 2: STR: command not found
O que estou fazendo errado? Eu olho para os tutoriais de script bash extremamente básicos / para iniciantes on-line e é assim que eles dizem para declarar variáveis ... Portanto, não tenho certeza do que estou fazendo de errado.
Estou no Ubuntu Server 9.10. E sim, o bash está localizado em /bin/bash
.
#!/usr/bin/env bash
em vez de colocar diretamente#!/bin/bash
a menos que você esteja absolutamente certo seusbash
é em/bin
causa de esta resposta: stackoverflow.com/a/21613044/3589567Respostas:
Você não pode ter espaços ao redor do seu sinal '='.
Quando você escreve:
o bash tenta executar um comando chamado STR com 2 argumentos (as strings '=' e 'foo')
Quando você escreve:
o bash tenta executar um comando chamado STR com 1 argumento (a sequência '= foo')
Quando você escreve:
O bash tenta executar o comando foo com STR definido como a sequência vazia em seu ambiente.
Não tenho certeza se isso ajuda a esclarecer ou se é mera ofuscação, mas observe que:
STR "=" "foo"
,STR "=foo"
,STR="" foo
.A seção relevante da especificação da linguagem sh, seção 2.9.1, declara:
Nesse contexto, a
word
é o comando que o bash será executado. Qualquer sequência que contenha=
(em qualquer posição que não seja o início da sequência) que não seja um redirecionamento é uma atribuição de variável, enquanto qualquer sequência que não seja um redirecionamento e não contenha=
será um comando. InSTR = "foo"
,STR
não é uma atribuição de variável.fonte
FOO-BAR=qux
não é uma atribuição de variável, poisFOO-BAR
não é um nome válido.Solte os espaços ao redor da
=
placa:fonte
set foo = bar
é um erro comum em arquivos em lote do Windows como bem e não a linguagem lote é ridicularizado por isso ;-)No modo interativo, tudo fica bem:
Obviamente (!) Como Johannes disse, não há espaço ao redor
=
. Caso exista algum espaço=
no modo interativo, ocorrerá erros comofonte
STR = "Hello World"
, portanto, essa resposta não se aplica aqui.$
marcaEu sei que isso foi respondido com uma resposta de alta qualidade. Mas, em suma, você não pode ter espaços.
Não funcionou por causa dos espaços ao redor do sinal de igual. Se você fosse correr ...
Funcionaria
fonte
Quando você define qualquer variável, não precisa colocar espaços extras.
Por exemplo
Portanto, remova os espaços:
e vai funcionar bem.
fonte