2010-12-11 12 views
28

Podczas wpisywania zmiennych w Bash, jaka jest różnica między declare a typeset? Kiedy jest używany wewnątrz funkcji: jaka jest różnica między declare a typeset i local?Różnice między zadeklarowaniem, zmienną składaną i lokalną w Bash

Jedyną różnicą, z którą się zetknąłem jest to, że zestaw jest przenośny dla skryptów ksh. Poza tym, czy są jakieś powody, dla których jeden powinien być preferowany nad drugim?

AKTUALIZACJA: Dodano local do pytania.

+0

podobna do tej kwestii [] (http://stackoverflow.com/q/30362831/471376). – JamesThomasMoon1979

Odpowiedz

8

Jeśli chodzi o bash, nie, nie ma różnicy. W rzeczywistości, strona podręcznika została podziela tą definicję

stwierdzenie [-aAfFilrtux] [-p] [nazwa [= wartość] ...]
przygotowana [-aAfFilrtux] [-p] [nazwa [= wartość] ...]
Zadeklaruj zmienne i/lub podaj im atrybuty. Jeśli nie podano żadnych nazw, to wyświetl wartości zmiennych . Opcja -p będzie wyświetlać atrybuty i wartości każdej nazwy ...

Znalazłem również this little tidbit co dodatkowo uzasadnia roszczenie, a także przenoszenia ksh wzmiance.

zgłoszenia albo typeset builtins, które są dokładne synonimy zezwolić na modyfikację właściwości zmiennych. Jest to bardzo słaba forma wpisywania [1] dostępna w niektórych językach programowania . Komenda declare to specyficzna dla wersji 2 lub nowszej Bash. Komenda typeset działa również w skryptach ksh .

+8

"help typeset" mówi mi, że jest przestarzały. Przestarzałe na rzecz "zadeklaruj". – lecodesportif

+0

jest to dobry przykład problemów z dokumentacją bash, a także niespójności z pomocą wiersza poleceń (za pomocą polecenia "help") i stron podręcznika (używając "man bash" i przechodzenia do SHELL BUILTINS) i wbudowanej strony (używając "wbudowanych manów"). Jest tam również trochę literówek, więc bądź ostrożny. – osirisgothra

3

W podręczniku Bash pod sekcji 4.2 Bash Builtin Commands stwierdza:

'przygotowana'
przygotowana [-afFrxi] [p] [NAZWA [= wartość] ...]
określenia " komenda typeset jest dostarczana dla kompatybilności z powłoką Korn ; jednak został przestarzały na rzecz wbudowanego polecenia "declare" .

15
  • Różnica typeset i declare:

Pierwszy jest bardziej mobilny (np KSH.), Podczas gdy ten ostatni jest bardziej korzystne, gdy przenoszenie nie jest problemem.

  • Różnica declare (lub typeset) i local stosowane wewnątrz funkcji:

Były to ostatnie oznacza, ale bardziej wydajny. Na przykład, declare -i x sprawia x posiada atrybut integer, declare -r x sprawia x tylko do odczytu, itp

+12

'local' i' declare' są w większości identyczne i przyjmują wszystkie te same argumenty z dwoma wyjątkami: lokalne zawiedzie jeśli nie jest używane w funkcji, i lokalne, bez żadnych filtrów args do drukuj tylko mieszkańców, deklaruj nie. – ormaaj

+0

@ormaaj masz rację, nie zdawałem sobie sprawy, że 'local' obsługuje również opcje. Wielkie dzięki. –

Powiązane problemy