Ricerca…


Spazio bianco durante l'assegnazione di variabili

Gli spazi bianchi sono importanti quando si assegnano le variabili.

foo = 'bar' # incorrect
foo= 'bar'  # incorrect
foo='bar'   # correct

I primi due provocheranno errori di sintassi (o, peggio, eseguendo un comando errato). L'ultimo esempio imposterà correttamente la variabile $foo sul testo "bar".

Manca l'ultima riga in un file

Lo standard C dice che i file dovrebbero terminare con una nuova riga, quindi se EOF arriva alla fine di una linea, quella linea potrebbe non essere ignorata da alcuni comandi. Come esempio:

$ echo 'one\ntwo\nthree\c' > file.txt

$ cat file.txt
one
two
three

$ while read line ; do echo "line $line" ; done < file.txt
one
two

Per assicurarti che funzioni correttamente nell'esempio precedente, aggiungi un test in modo che continui il ciclo se l'ultima riga non è vuota.

$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt
one
two
three

I comandi non riusciti non fermano l'esecuzione dello script

Nella maggior parte dei linguaggi di scripting, se una chiamata di funzione fallisce, può generare un'eccezione e interrompere l'esecuzione del programma. I comandi di Bash non hanno eccezioni, ma hanno codici di uscita. Un codice di uscita diverso da zero segnala un errore, tuttavia un codice di uscita diverso da zero non arresta l'esecuzione del programma.

Questo può portare a situazioni pericolose (anche se certamente inventate) in questo modo:

#!/bin/bash
cd ~/non/existent/directory
rm -rf *

Se cd -ing su questa directory fallisce, Bash ignorerà l'errore e passerà al comando successivo, cancellando la directory da cui è stato eseguito lo script.

Il modo migliore per risolvere questo problema è utilizzare il comando set :

#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *

set -e dice a Bash di uscire immediatamente dallo script se qualsiasi comando restituisce uno stato diverso da zero.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow