Szukaj…


Biała spacja podczas przypisywania zmiennych

Białe znaki mają znaczenie podczas przypisywania zmiennych.

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

Pierwsze dwa spowodują błędy składniowe (lub, co gorsza, wykonanie niepoprawnego polecenia). Ostatni przykład poprawnie ustawi zmienną $foo na tekst „bar”.

Brak ostatniej linii w pliku

Standard C mówi, że pliki powinny kończyć się nową linią, więc jeśli EOF pojawi się na końcu linii, niektóre linie nie mogą pominąć tej linii. Jako przykład:

$ 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

Aby upewnić się, że działa to poprawnie w powyższym przykładzie, dodaj test, aby kontynuował pętlę, jeśli ostatni wiersz nie jest pusty.

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

Nieudane polecenia nie zatrzymują wykonywania skryptu

W większości języków skryptowych, jeśli wywołanie funkcji nie powiedzie się, może zgłosić wyjątek i zatrzymać wykonywanie programu. Polecenia bash nie mają wyjątków, ale mają kody wyjścia. Niezerowy kod wyjścia sygnalizuje awarię, jednak niezerowy kod wyjścia nie zatrzyma wykonywania programu.

Może to prowadzić do niebezpiecznych (choć zapewne wymyślonych) sytuacji takich jak:

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

Jeśli polecenie cd do tego katalogu nie powiedzie się, Bash zignoruje awarię i przejdzie do następnej komendy, usuwając katalog z miejsca, w którym uruchomiono skrypt.

Najlepszym sposobem na rozwiązanie tego problemu jest użycie polecenia set :

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

set -e mówi Bashowi, aby natychmiast opuścił skrypt, jeśli jakakolwiek komenda zwróci niezerowy status.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow