Zoeken…


Witruimte bij het toewijzen van variabelen

Witruimte is belangrijk bij het toewijzen van variabelen.

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

De eerste twee resulteren in syntaxisfouten (of erger, het uitvoeren van een onjuiste opdracht). In het laatste voorbeeld wordt de variabele $foo correct ingesteld op de tekst "bar".

De laatste regel in een bestand ontbreekt

De C-standaard zegt dat bestanden moeten eindigen met een nieuwe regel, dus als EOF aan het einde van een regel komt, mag die regel door sommige opdrachten niet worden gemist. Als voorbeeld:

$ 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

Om ervoor te zorgen dat dit correct werkt voor in het bovenstaande voorbeeld, voegt u een test toe zodat de lus wordt voortgezet als de laatste regel niet leeg is.

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

Mislukte opdrachten stoppen de uitvoering van het script niet

In de meeste scripttalen, als een functie-aanroep mislukt, kan dit een uitzondering veroorzaken en de uitvoering van het programma stoppen. Bash-opdrachten hebben geen uitzonderingen, maar ze hebben wel exitcodes. Een exitcode die niet nul is, geeft een storing aan, maar een exitcode die niet nul is, zal de uitvoering van het programma niet stoppen.

Dit kan leiden tot gevaarlijke (hoewel wel bedachte) situaties zoals deze:

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

Als het cd -openen naar deze map mislukt, negeert Bash de fout en gaat naar de volgende opdracht, waarbij de map wordt gewist van waar u het script hebt uitgevoerd.

De beste manier om dit probleem op te lossen, is door gebruik te maken van de opdracht set :

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

set -e vertelt Bash om het script onmiddellijk te verlaten als een opdracht een niet-nul status retourneert.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow