Я пытаюсь выяснить, как объявить переменную, которая является массивом, и использовать ее в качестве аргументов, передаваемых сценарию оболочки.Или узнайте, как быть немного более СУХИМ, научившись
Вот то, что я пробовал, вызывает /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 "("
Также пытался сбежать \(
, но не сработало.
Любые подсказки приветствуются!