2011-07-07 14 views
6

Witam Tworzę skrypt powłoki.Skrypt powłoki wywołuje funkcję ze zmienną?

i przykładowy kod wygląda

#!/bin/bash 

test_func(){ 
{ 
    echo "It works!" 
} 

funcion_name = "test_func" 

Chcę jakoś móc wywołać test_func() za pomocą zmiennej "nazwa_funkcji"

wiem, że to możliwe w php przy użyciu call_user_func ($ function_name) lub przez sying $ function_name()

jest to również możliwe w skrypcie powłoki?

Ogromne uznanie za pomoc! :)

Odpowiedz

3
#!/bin/bash 
test_func() { 
    echo "It works!" 
} 

function_name="test_func" 

eval ${function_name} 
10

Chcesz bash wbudowany eval. Od man bash:

eval [arg ...] The args are read and concatenated together into a single command. This command is then read and executed by the shell, and its exit status is returned as the value of eval. If there are no args, or only null arguments, eval returns 0.

Można również wykonać go z prostego zmiennej substytucji, jak w

#!/bin/bash 

test_func() { 
    echo "It works!" 
} 

function_name="test_func" 

$function_name 
+0

próbuje jeden z twoich wskazówek, próbuje wykonać test_func jako polecenia powłoki zamiast wywoływania funkcji :( –

+0

@Ben - nie jestem pewien, co masz na myśli - oba sposoby działają dla mnie. Kiedy definiujesz funkcję, staje się ona zasadniczo poleceniem powłoki. Jeśli podasz bardziej szczegółowy przykład tego, co nie działa, może pomoc: –

+0

Bardzo _javascvript-esque_! –

Powiązane problemy