Передача произвольного числа аргументов функции из переменной - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать файл 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 ]

1 голос
/ 09 мая 2019

попробуйте это:

#!/bin/bash
SOURCE=(
SomeFile.class 
SomeOtherFile.class 
)
jar cf test.jar "${SOURCE[@]}"
0 голосов
/ 09 мая 2019

Благодаря пониманию @ chepner's и @UtLox я решил эту проблему, так как основная проблема была 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[@]}";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...