如何在ksh中动态调用函数

时间:2014-12-12 03:42:57

标签: shell ksh

如何在运行时在ksh中调用函数和脚本名称。

例如:功能测试

function test { echo "shankar" }

脚本:emptycheck.ksh

运行时间:

./emptycheck.ksh test # <---- Here I want function name (test) here

3 个答案:

答案 0 :(得分:1)

目前尚不清楚你的目标是什么,但也许这很有用:

$ cat a.sh
#!/bin/bash

foo() { echo foo; }
bar() { echo bar; }

${1-foo}
$ ./a.sh foo
foo
$ ./a.sh 
foo
$ ./a.sh bar
bar

答案 1 :(得分:-1)

如果您不想使用getopts并激活所有功能,请使用点读取当前环境中的函数:

我用其他语法复制了William Pursell的例子:

$ cat a.sh
#!/bin/bash

foo() { echo Echoing foo; }
bar() { echo Echoing bar; }

$ . a.sh
$ foo
Echoing foo
$ bar
Echoing bar

答案 2 :(得分:-1)

你可以命名一个函数“test”,但如上所述,它很危险。

在采购文件时不要打扰“#!...”。如果你在采购时没有运行bash,那就不会改变图片。

如果您坚持为现有命令或内置命名函数(有充分理由),然后使用现有命令或内置命令,则使用内置的“命令”, “避免使用该名称的任何别名或功能,并选择默认定义”。

e.g。以前的“测试”现在可以访问“命令测试......”

因此,正确使用“命令”命令是在一个重写函数内部,例如,

function cd {
    # clean up garbage in the current directory, so then:
    command cd $*      # executes the "real" cd, so you can:
    # do whatever useful things you may what to do on arriving in the new one:
    #  e.g.   i do a "dotlib", which sources any ".*rc" files in the current directory.
}
function comment { echo $* 2>/dev/null; }

comment good luck!