Jenkins 여러 줄 문자열 매개 변수를 사용하여 yaml 파일에 새 항목을 추가하고 있습니다. 하지만 yaml 구문과 일치하도록 이러한 항목의 형식을 지정하고 싶습니다.
원하는 최종 결과는 다음과 같습니다.
var:
- subvar1
- subvar2
- subvar3
...
지금까지 내가 한 일은 다음과 같습니다.
저는 다음과 같은 여러 줄 문자열 인수(환경 변수)를 가져와서 subvar1\nsubvar2\nsubvar3
yaml 파일에 추가하는 셸 스크립트를 실행하고 있습니다. 따라서 내 코드 줄은 다음과 같습니다.
printf "var:\n${HOSTNAMES}" >> ${WORKSPACE}/group_vars/all
후속 yaml 파일은 다음과 같습니다.
var:
subvar1
subvar2
subvar3
두 개의 공백과 하이픈을 추가한 다음 각 후속 줄 앞에 공백을 추가하는 방법에 대한 도움을 찾고 있습니다.var:
편집하다: SED나 AWK가 좋은 생각이 아니라면 더 나은 접근 방식은 무엇입니까?
답변1
해당 변수의 리터럴 개행 문자인 경우 다음을 수행할 수 있습니다.
HOSTNAMES='subvar1
subvar2
subvar3'
(IFS=$'\n'; printf -- "- %s\n" $HOSTNAMES) # variable is unquoted
- subvar1
- subvar2
- subvar3
\
리터럴 과 문자가 있는 경우 n
결과는 동일합니다.
HOSTNAMES='subvar1\nsubvar2\nsubvar3'
printf "$HOSTNAMES\n" | sed 's/^/- /'
답변2
Bash 배열 사용:
$ HostNames=( host1 "host two" host3 )
$ { printf 'var:\n' ; printf -- ' - %s\n' "${HostNames[@]}"; } > somefile
$
$ cat somefile
var:
- host1
- host two
- host3