Ricevo un errore 2: [: missing ]
quando utilizzo il seguente while
loop:
#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
echo "please type something (bye quits) "
read INPUT_STRING
echo "you tuped : $INPUT_STRING "
done
Ricevo un errore 2: [: missing ]
quando utilizzo il seguente while
loop:
#!/bin/sh
while ["$INPUT_STRING" != "bye"]
do
echo "please type something (bye quits) "
read INPUT_STRING
echo "you tuped : $INPUT_STRING "
done
Risposte:
Devi aggiungere spazi attorno while
alle condizioni:
while [ "$INPUT_STRING" != "bye" ]
Questo può sembrare un po 'strano per le persone con un background di programmazione, ma i motivi sono questi:
while
si aspetta un elenco di comandi. Il flusso di controllo dipende dallo stato di uscita di questo comando: finché è zero, il corpo continua ad essere eseguito.
[ expression ]
è una forma alternativa di test expression
. Qui test
è un comando che valuta l'espressione e restituisce il suo valore sotto forma dello stato di uscita del comando. Si assicura di restituire uno stato di uscita pari a zero se l'espressione (logicamente) restituisce un true
valore booleano, in modo che possa essere utilizzata nei comandi if
e while
.
In effetti, entrambi test
e [
sono file eseguibili in Linux (in genere si trovano in /usr/bin
). Alcune shell, tuttavia, bash
usano comandi interni con gli stessi nomi.
Come test
e [
sono comandi (tecnicamente) semplici, i loro argomenti dovrebbero essere separati dal nome del comando e tra loro con uno o più caratteri bianchi.
while
e la condizione. Li ho rimossi, poiché non hanno aggiunto qualcosa di importante alla risposta. Naturalmente hai ragione su cosa succede quando si omettono gli spazi intorno!=
all'operatore.