2011-01-11 6 views

Odpowiedz

44

Słowo kluczowe function została zastąpiona function_name() do przenoszenia z POSIX spec

funkcji jest nazwa zdefiniowana przez użytkownika, który służy jako proste polecenia, aby wywołać polecenie związek z nowym pozycyjnym Parametry. Funkcja jest zdefiniowana jako "polecenie definicji funkcji".

Format definicji funkcji poleceń jest następujący:

fname() compound-command[io-redirect ...] 

Należy pamiętać, że { } nie są obowiązkowe, więc jeśli nie będziemy używać słowa kluczowego function (i nie należy) następnie () są konieczne, aby analizator składni wiedział, że definiujesz funkcję.

przykład, jest to definicja funkcji prawne i wywołania:

$ myfunc() for arg; do echo "$arg"; done; myfunc foo bar 
foo 
bar 
+0

Powiązany http://stackoverflow.com/a/14652042 –

9

Puste nawiasy są wymagane w pierwszym przykładzie, aby bash wiedział, że jest to definicja funkcji (w przeciwnym razie wygląda jak zwykłe polecenie). W drugim przykładzie, () jest opcjonalny, ponieważ użyłeś function.

+0

Ah ok, przypuszczenie, że ma sens, to tylko w PHP ciebie Umieszczam rzeczy w nawiasach, więc byłem ciekawy, czy mógłbym zrobić coś podobnego w skryptach linuxowych. – Mint

+2

@Mint: Nie można umieścić niczego w nawiasach i nie są one używane podczas wywoływania funkcji, ale nadal można przekazać funkcje pozycyjne do funkcji. 'foo() {echo" $ 1 "; }; foo hello' –

4

Bez function ekspansja ps dzieje podczas rozdzielczości. Np:

alias a=b 
# Gets expanded to "b() { echo c; }" : 
a() { echo c; } 
b 
# => c 
# Gets expanded to b: 
a 
# => c 

Z function jednak ekspansja alias nie zdarza się w momencie definicji, więc alias "ukrywa" definicję:

alias a=b 
function a { echo c; } 
b 
# => command not found 
# Gets expanded to b: 
a 
# => command not found 
unalias a 
a 
# => c