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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow