Domanda

Ho questo script chiamato test.sh:

#!/bin/bash
STR = "Hello World"
echo $STR

quando corro sh test.sh ottengo questo:

test.sh: line 2: STR: command not found

Che cosa sto facendo di sbagliato? Guardo estremamente di base / principianti bash scripting tutorial on-line e questo è come si suol dire per dichiarare le variabili ... Quindi io non sono sicuro di quello che sto facendo male.

Sono su Ubuntu Server 9.10. E sì, bash si trova a /bin/bash.

È stato utile?

Soluzione

Non si può avere spazi intorno alla vostra segno '='.

Quando si scrive:

STR = "foo"

bash tenta di eseguire un comando chiamato STR con 2 argomenti (le stringhe '=' e 'pippo')

Quando si scrive:

STR =foo

bash tenta di eseguire un comando chiamato STR con 1 argomento (la stringa '= foo')

Quando si scrive:

STR= foo

bash tenta di eseguire il comando con foo set STR per la stringa vuota nel suo ambiente.

Non sono sicuro se questo aiuta a chiarire o se si tratta di mera confusione, ma nota che:

  1. il primo comando è esattamente equivalente a: STR "=" "foo",
  2. il secondo è la stessa di STR "=foo",
  3. e l'ultimo è equivalente a STR="" foo.

La sezione dedicata del sh spec, sezione 2.9.1 afferma:

  

A "semplice comando" è una sequenza di assegnazioni di variabili opzionali e reindirizzamenti, in qualsiasi sequenza, opzionalmente seguita da parole e ridirezioni, terminato da un operatore di controllo.

In questo contesto, un word è il comando che bash è andare a correre. Qualsiasi stringa contenente = (in posizione diversa rispetto all'inizio della stringa), che non è un reindirizzamento è un'assegnazione variabile, mentre qualsiasi stringa che non è un reindirizzamento e non contiene = è un comando. In STR = "foo", STR non è un assegnamento di variabile.

Altri suggerimenti

Eliminare gli spazi intorno al segno =:

#!/bin/bash 
STR="Hello World" 
echo $STR 

Nella modalità interattiva tutto sembra bene

$ str="Hello World"
$ echo $str
Hello World

Ovviamente! come ha detto Johannes, nessuno spazio intorno '='. Nel caso in cui non v'è alcun spazio intorno '=' quindi in modalità interattiva dà errori come `

  

Nessun comando 'str' trovato

So che questo è stato risposto con una risposta molto alta qualità. Ma, insomma, non puoi avere spazi.

#!/bin/bash
STR = "Hello World"
echo $STR

Non ha funzionato a causa degli spazi intorno al segno di uguale. Se si dovesse correre ...

#!/bin/bash
STR="Hello World"
echo $STR

E 'avrebbe funzionato

Quando si definisce qualsiasi variabile, allora non c'è bisogno di mettere in eventuali spazi extra.

per es.

name = "Stack Overflow"  
// it is not valid, you will get an error saying- "Command not found"

Quindi, rimuovere gli spazi:

name="Stack Overflow" 

e funzionerà bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top