我正在使用 Jenkins 多行字符串参数将新条目附加到 yaml 文件。但随后我想格式化这些条目以匹配 yaml 语法。
期望的最终结果是:
var:
- subvar1
- subvar2
- subvar3
...
到目前为止我所做的是:
我正在运行一个 shell 脚本,它采用看起来像的多行字符串参数(环境变量)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