Jenkins 複数行文字列パラメータを使用して yaml ファイルに新しいエントリを追加しています。しかし、yaml構文と一致するようにこれらの項目をフォーマットしたいと思います。
必要な最終結果は次のとおりです。
var:
- subvar1
- subvar2
- subvar3
...
これまで私がしたことは次のとおりです。
私は、次のような複数行の文字列引数(環境変数)を取得し、subvar1\nsubvar2\nsubvar3
yamlファイルに追加するシェルスクリプトを実行しています。したがって、私のコード行は次のようになります。
printf "var:\n${HOSTNAMES}" >> ${WORKSPACE}/group_vars/all
後続の yaml ファイルは次のようになります。
var:
subvar1
subvar2
subvar3
2つのスペースとハイフンを追加してから、後続の各行の前にスペースを追加する方法を探しています。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