Bash - 从脚本传递多个数组参数

Bash - Pass multiple array arguments from script

我正在按照 README 文件中提供的说明使用 XcodeCoverageConverter 将 XCResult 转换为 Cobertura XML。 当只有一项作为 --exclude-packages 的值传递时,它按预期工作。 但是,当我尝试按如下方式传递数组时,

xcc generate coverage.json TargetDirectory cobertura-xml --exclude-packages Tests AnotherPackageName --verbose

我收到以下错误,

Error: The value 'AnotherPackageName' is invalid for '<output-formats>'
Usage: xcc generate <json-file> <output-path> [<output-formats> ...] [--exclude-targets <exclude-targets> ...] [--exclude-packages <exclude-packages> ...] [--verbose]

我正在从我的 Bash 脚本中尝试同样的事情,如果我为 --exclude-packages.

传递数组,我会得到同样的错误

示例 1

jsonPath="coverage.json"
coberturaTargetPath="Cobertura"

xcc generate $jsonPath \
   $coberturaTargetPath cobertura-xml \
   --exclude-packages Tests AnotherPackageName \
   --verbose

示例 2

jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
excludePackages=(Tests AnotherPackageName)

xcc generate $jsonPath \
   $coberturaTargetPath cobertura-xml \
   --exclude-packages ${excludePackages[@]} \
   --verbose

示例 3

jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
excludePackages=(Tests AnotherPackageName)

xcc generate $jsonPath \
   $coberturaTargetPath cobertura-xml \
   --exclude-packages=${excludePackages[@]} \
   --verbose

示例 4

jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
outputFormats=(cobertura-xml)
excludePackages=(Tests AnotherPackageName)

xcc generate $jsonPath \
   $coberturaTargetPath ${outputFormats[@]} \
   --exclude-packages=${excludePackages[@]} \
   --verbose

示例 5

jsonPath="coverage.json"
coberturaTargetPath="Cobertura"
outputFormats=(cobertura-xml)
excludePackages=(Tests AnotherPackageName)

xcc generate $jsonPath \
   $coberturaTargetPath ${outputFormats[@]} \
   --exclude-packages="${excludePackages[@]} " \
   --verbose

在上述所有尝试中,我都遇到了同样的错误。 我为 --exclude-packages 传递的项目(不包括第一项)被认为是输出格式。 如何解决这个问题?

更新:

xcc 实用程序确实支持 --exclude-packages 的多个参数。 Reference

使用 https://shellcheck.net 检查您的脚本。

假设xcc实用程序支持多个--exclude-packages参数,那么:对于每个数组元素,在每个数组元素之前添加--exclude-packages,然后将其传递给命令。

excludePackages=(Tests AnotherPackageName)

cmd=(
    xcc generate
    "$jsonPath"
    "$coberturaTargetPath"
    "${outputFormats[@]}"
)
for ii in "${excludePackages[@]}"; do
   cmd+=(--exclude-packages "$ii")
done
cmd+=(--verbose)

echo "Running: ${cmd[*]}"
"${cmd[@]}"