从变量将任意数量的参数传递给函数

时间:2019-05-08 22:41:32

标签: bash shell jar

我试图构建一个包含任意数量文件的jar文件,然后执行其他功能。问题在于输出是用空格分隔的字符串,因此jar函数似乎将其解释为无法定位文件的参数。我构建了这个简单的函数来演示该问题:

makeJar() {
    touch SomeFile.class;
    touch SomeOtherFile.class;
    local FILES=`echo "SomeFile.class SomeOtherFile.class"`;
    echo $FILES;
    jar cf test.jar $FILES;
}

执行上述功能会导致:

SomeFile.class SomeOtherFile.class : no such file or directory

但是,执行jar cf test.jar SomeFile.class SomeOtherFile.class是可行的。我猜问题出在与如何将参数传递给jar函数并试图传递数组有关,但到目前为止没有任何效果。

2 个答案:

答案 0 :(得分:1)

尝试一下:

#!/bin/bash
SOURCE=(
SomeFile.class 
SomeOtherFile.class 
)
jar cf test.jar "${SOURCE[@]}"

答案 1 :(得分:0)

With @chepner's and @UtLox insight I ended up solving it like this since the main problem was zsh:

makeJar() {
    touch SomeFile.class;
    touch SomeOtherFile.class;
    savedIFS="$IFS"
    IFS=' '
    local FILES=(`echo "SomeFile.class SomeOtherFile.class"`);
    IFS="$savedIFS"
    echo $FILES;
    jar cf test.jar "${FILES[@]}";
}