2009-09-09 9 views
5

Tringuję, aby zaktualizować skrypt basha napisany przez kogoś innego i przeszedłem przez linię, której nie jestem pewien.Test skryptu powłoki

Czy ktoś może mi powiedzieć, co robi po check:

if [ :$RESULT != :0,0 ] 

zakładam to sprawdzanie pewnej wartości w $ result, ewentualnie z podciągu?

Każda pomoc doceniona!

Odpowiedz

4

Myślę, że : jest zwykłą sztuczką, której używają ludzie w przypadku, gdy zmienna jest pusta.

Jeśli jest pusty, wówczas powłoka miałoby to:

if [ != 0,0 ] 

który byłby błąd składni. Umieszczenie : przed Oznacza to, że jeśli zmienna jest pusta skorupa ma to:

if [ : != :0,0 ] 

który nie jest błąd składni i że (słusznie) zgłosić fałszywe.

11

Komenda [ tylko aliasem polecenia test, zamykający nawias kwadratowy prostu cukier sytax (komenda [ ignoruje ostatni argument, jeśli jest to wspornik zamknięcia), a więc linia faktycznie czyta

if test :$RESULT != :0,0 

Porównuje, czy ciąg znaków :$RESULT jest równy łańcuchowi :0,0. Dwukropek jest poprzedzony przypadkiem, że zmienna $RESULT jest pusta. Linia będzie wyglądać następująco, jeśli jelita grubego został pominięty i $RESULT był pusty ciąg:

if test != 0,0 

będzie to prowadzić do błędu, ponieważ test oczekuje argumentu przed !=. Alternatywą byłoby użyć cudzysłowów, aby wskazać, że nie jest to argument, który jest pusty ciąg znaków:

if test "$RESULT" != 0,0 
# Will become 
if test "" != 0,0 

Zmiana zostanie zaksięgowana jest bardziej mobilny, choć.

+0

Spróbuj 'man bash' i poszukać wbudowanego polecenia' test' do dalszych informacji – soulmerge

+0

Dobra, podążaj za tym, dzięki! Czy tak naprawdę jest to porównanie z łańcuchem "0,0"?Pytam tylko, ponieważ zmienny wynik nigdy nie miałby tej wartości! Zastanawiam się, czy 0,0 robi coś innego. Może pusty łańcuch? –

+0

Nie, '0,0' jest łańcuchem, a operator'! = 'Porównuje łańcuchy, więc sprawdza, czy' $ WYNIK 'jest łańcuchem '' 0'. Spróbuj "testu man". – soulmerge

1

Czasami zobaczysz x używany w taki sposób, w jaki dwukropek jest używany w twoim przykładzie.

Preferowanym sposobem zrobienia tego typu badania w bash jest użycie podwójnego kwadratu Wspornik:

if [[ $RESULT != 0,0 ]] 

Podwójna forma uchwyt pozwala na większą elastyczność, lepszą czytelność, zmniejszoną potrzebę ucieczki i cytowanie i kilka więcej funkcji. Aby uzyskać więcej informacji, patrz this page.

Jeśli chcesz przetestować wartości liczbowych, zamiast strun lub plików, należy użyć podwójnych nawiasów:

if ((3 + 4 > 6)) 
Powiązane problemy