Comando non trovato errore in Bash assegnamento di variabile
-
20-09-2019 - |
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
.
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:
- il primo comando è esattamente equivalente a:
STR "=" "foo"
, - il secondo è la stessa di
STR "=foo"
, - 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.