【发布时间】:2019-09-27 22:21:09
【问题描述】:
我试图弄清楚如何声明一个数组变量并将其用作传递给 shell 脚本的参数。或者通过学习如何变得更加干爽
这是我尝试过的导致/bin/sh: eval: line X: syntax error: bad substitution:
variables:
EXTRA_ARGS: (. "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG)
build:
stage: build
script:
- path/to/script.sh uniqueParam1 uniqueParam2 ${EXTRA_ARGS[@]}
- path/to/script.sh uniqueParam3 uniqueParam4 ${EXTRA_ARGS[@]}
- path/to/script.sh uniqueParam5 uniqueParam6 ${EXTRA_ARGS[@]}
以下运行良好,但正如您所知,我重复了额外的参数:
build:
stage: build
script:
- path/to/script.sh uniqueParam1 uniqueParam2 . "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG
- path/to/script.sh uniqueParam3 uniqueParam4 . "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG
- path/to/script.sh uniqueParam5 uniqueParam6 . "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG
我也尝试删除 . 点作为参数,但错误仍然存在。
出于我的考虑,我尝试在 bash 中运行该概念,并成功运行如下:
#!/bin/bash
TEST1="Hello"
TEST2="human!"
ARGS=(. $TEST1 $TEST2 "${TEST2} ${TEST1}" "param1" "param2")
echo "${ARGS[*]}"
输出:
. Hello human! human! Hello param1 param2
还尝试将其放入脚本中:
script:
- EXTRA_ARGS=(. "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG)
而且也不行:
/bin/sh: eval: line 92: syntax error: unexpected "("
也试图逃跑\(,但没有成功。
【问题讨论】:
-
/bin/sh(很可能)不是 bash。您在 gitlab 中的 docker 没有运行 bash。 -
你是绝对正确的@KamilCuk 我会看看我是否可以将跑步者更改为 bash,因为我认为 unix shell 不支持数组