Bash
Fallgropar gropar~~POS=HEADCOMP
Sök…
Vitrymd vid tilldelning av variabler
Whitepace är viktigt när du tilldelar variabler.
foo = 'bar' # incorrect foo= 'bar' # incorrect foo='bar' # correct
De två första kommer att resultera i syntaxfel (eller ännu värre, att utföra ett felaktigt kommando). Det sista exemplet sätter korrekt variabeln $foo
till texten "fält".
Saknar den sista raden i en fil
C-standarden säger att filer ska sluta med en ny rad, så om EOF kommer i slutet av en rad kanske den raden inte missas av några kommandon. Som ett exempel:
$ 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
För att säkerställa att detta fungerar korrekt för i exemplet ovan, lägg till ett test så att det kommer att fortsätta slingan om den sista raden inte är tom.
$ while read line || [ -n "$line" ] ; do echo "line $line" ; done < file.txt one two three
Misslyckade kommandon stoppar inte körning av skript
I de flesta skriptspråk, om ett funktionssamtal misslyckas, kan det kasta ett undantag och stoppa körningen av programmet. Bash-kommandon har inga undantag, men de har utgångskoder. Ett icke-nollutgångskodsignal misslyckas, men en icke-nollutgångskod kommer inte att stoppa exekveringen av programmet.
Detta kan leda till farliga (även om de visserligen är förmodade) situationer som så:
#!/bin/bash
cd ~/non/existent/directory
rm -rf *
Om cd
-ing till den här katalogen misslyckas ignorerar Bash felet och går vidare till nästa kommando, och rensar katalogen där du kör skriptet.
Det bästa sättet att hantera detta problem är att använda set- kommandot:
#!/bin/bash
set -e
cd ~/non/existent/directory
rm -rf *
set -e
berättar för Bash att lämna skriptet omedelbart om något kommando returnerar en icke-nollstatus.