2011-11-16 26 views
6

Mi piacerebbe ottenere il nome della funzione dall'interno della funzione, per scopi di registrazione.Ottieni il nome della funzione nello script KornShell

KornShell funzione (ksh):

foo() 
{ 
    echo "get_function_name some useful output" 
} 

C'è qualcosa di simile a $0, che restituisce il nome dello script all'interno di script, ma che invece fornisce il nome di una funzione?

+0

Off-topic a questa domanda: per bash, utilizzare la variabile di matrice [FUNCNAME] (http://www.gnu.org/software/bash/manual/bashref.html#index-FUNCNAME-193). –

risposta

5

Utilizzare la ksh "funzione foo ..." modulo:

$ cat foo1 
#!/bin/ksh 
foo3() { echo "\$0=$0"; } 
function foo2 { echo "\$0=$0"; } 
foo2 
foo3 
$ ./foo1 
$0=foo2 
$0=./foo1 
9

Se si definisce la funzione con la parola chiave function, quindi $0 è il nome della funzione:

$ function foo { 
>  echo "$0" 
> } 
$ foo 
foo 

(Testato in pdksh.)

+0

perfetto, funziona bene! quali sono i pro/contro principali dell'utilizzo della funzione di parole chiave? A mio parere le persone sembrano usare ksh88 (difficile da dire con certezza), ma non ho visto una singola parola chiave di funzione negli script – Dima

+0

@Dima: 'function' rende questa una funzione di shell Korn, che ha un' $ 0'. L'altra forma esiste per la compatibilità con System V/POSIX. –

5

[...] quali sono i principali vantaggi/svantaggi di usare la funzione parola chiave?

Il principale pro è che "typeset myvar = abc" all'interno della funzione è ora una variabile locale, senza effetti collaterali possibili al di fuori della funzione. Ciò rende KSH notevolmente più sicuro per gli script di shell di grandi dimensioni. Main con è, forse, la sintassi non POSIX.

Problemi correlati