2011-11-16 11 views
6

Me gustaría obtener el nombre de la función dentro de la función, para fines de registro.Obtener el nombre de la función en la secuencia de comandos de KornShell

KornShell función (ksh):

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

¿Hay algo similar a $0, que devuelve el nombre del script dentro de guiones, pero que en cambio proporciona el nombre de una función?

+0

Fuera del tema a esta pregunta: para bash, use la variable de matriz [FUNCNAME] (http://www.gnu.org/software/bash/manual/bashref.html#index-FUNCNAME-193). –

Respuesta

5

Uso del ksh "función foo ..." formulario:

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

Si se define la función con la palabra clave function, entonces $0 es el nombre de la función:

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

(Probado en pdksh.)

+0

perfecto, funciona bien! ¿Cuáles son los principales pros/contras del uso de la función de palabras clave? En mi lugar, la gente parece usar ksh88 (difícil de decir con certeza), pero no vi una sola palabra clave de función dentro de las secuencias de comandos – Dima

+0

@Dima: 'function' hace de esto una función de shell Korn, que tiene un' $ 0'. La otra forma existe para la compatibilidad con System V/POSIX. –

5

[...] ¿cuáles son las principales ventajas/desventajas de la utilización de la función de palabras clave?

pro principal es que "compuesto tipo mivar = abc" dentro de la función es ahora una variable local, sin los efectos secundarios fuera de la función. Esto hace que KSH sea notablemente más seguro para scripts de shell grandes. Principal es, quizás, la sintaxis no POSIX.

Cuestiones relacionadas