2015-04-24 14 views
6

W Pythonie mogę typ zmiennej przez:Uzyskaj typ zmiennej w bashu

>>> i = 123 
>>> type(i) 
<type 'int'> 

widziałem na this page że nie istnieją typy zmiennych w bashu. Podane wyjaśnienie to:

Nie wpisane zmienne są zarówno błogosławieństwem, jak i przekleństwem. Pozwalają na większą elastyczność w skryptowaniu i ułatwiają grindowanie linii kodu (i dają ci wystarczająco dużo liny, żeby się powiesić!). Jednak pozwalają one również na subtelne błędy i zachęcają do niechlujnych nawyków programistycznych.

Ale nie jestem pewien, co to oznacza i jakie są rzeczywiste zalety (i wady).

Dzięki za odpowiedzi! :)

Odpowiedz

9

Bash nie ma typów w taki sam sposób jak w Pythonie (chociaż powiedziałbym, że Python ma klasy, a nie typy). Ale zmienne bash mają atrybuty , które są podane (głównie) przez declare, ale zakres atrybutów jest dość mały. Można znaleźć atrybut za pomocą declare -p, na przykład declare -i tworzy liczbę całkowitą:

declare -i num 
num=42 
declare -p num 

Daje:

declare -i num="42" 

Ale to słaba cecha w porównaniu do Pythona, lub prawie każdy współczesny język. Problem polega na tym, że w Bashu podstawowym typem jest ciąg tekstowy, a to jest w porządku, jeśli potrzebujesz tylko ciągów tekstowych dla takich rzeczy jak nazwy plików. Ale gdy zaczniesz wymagać ciężkiego przetwarzania, potrzebujesz innych typów. Bash na przykład nie obsługuje zmiennoprzecinkowej. Potrzebujesz również typów złożonych, takich jak klasa opisująca plik ze wszystkimi atrybutami, które może posiadać plik.

Bash 4 ma tablice asocjacyjne (declare -A), podobne do słowników Python, co znacznie rozszerza funkcjonalność.

Mimo to, większość zgodziłaby się, że Orientacja Obiektów jest prawie niemożliwa w Bashie, chociaż niektórzy twierdzą, że można to zrobić w powłoce Korn (która ma znacznie bardziej zaawansowane funkcje). http://en.wikipedia.org/wiki/Object-oriented_programming

Co ma bash w porządku, za co jest przeznaczone - proste przetwarzanie, które jest szybkie i łatwe do uzyskania. Istnieje jednak masa krytyczna, poza którą używanie takiego języka staje się nieporęczne, podatne na błędy i powolne. Ta krytyczna masa może być skalą, czyli dużą ilością danych lub złożonością.

Nie ma prostego punktu odcięcia, w którym należy przestać używać Bash i przejść do Pythona. Jest tak po prostu, że w miarę, jak programy stają się coraz bardziej złożone i większe, korzystanie z Pythona staje się silniejsze.

Powinienem dodać, że skrypty powłoki rzadko stają się mniejsze i mniej złożone w czasie!

+1

Szybka uwaga: OOP w bashie nie jest niemożliwe, po prostu szalone. Zajrzyj na https://github.com/uudruid74/bashTheObjects –