如何创建一个接受特定类型文件作为参数的Bash函数?

时间:2013-10-13 08:31:38

标签: bash file types arguments alias

到目前为止,我知道你必须创建一个函数才能传递参数。

但是,你如何表示参数的类型?

例如,如果要编译Java类文件然后运行生成的Java文件(无需每次键入文件名两次以区分扩展名),如何让函数知道名称属于不同类型的文件?

让我们说这是我们的功能:

compileAndRun()
{
    javac $1
    java  $2   # basically, we want to make this take the same argument
               # (because the names of the *.class and *.java files are the same)
}

所以,而不是输入:

compileAndRun test.class test.java

我们只想输入:

compileAndRun test

任何帮助以及您想要投入的任何无关信息都将非常感激。

2 个答案:

答案 0 :(得分:4)

只需使用$ 1两次。将这两个命令与&&连接起来更安全,因此如果编译不成功,则不会运行java。

function compile_n_run () {
    javac "$1".java && java "$1".class
}

答案 1 :(得分:2)

bash函数的参数实际上没有类型;它们只是字符串,你可以适当地使用它们。在这种情况下,编写一个获取Java源文件,编译它并运行结果输出的函数是相当简单的。

compile_n_run () {
    source=$1
    expected_output="${source%.java}.class" 
    javac "$source" && java "$expected_output"
}

$ compile_n_run test.java

我选择要求完整的Java源名称,因为它对自动完成更友好一些;您不必从命令行中删除.java,而是让函数为您执行此操作。 (否则,这个答案与choroba's)相同。