【发布时间】:2020-04-28 17:58:12
【问题描述】:
长话短说,我将使用 yq 使用 bash 解析目录中的 yaml 文件。我的 yaml 文件可能如下所示:
CLIENT_FIRST_NAME: bob
CLIENT_LAST_NAME: smith
或者
CLIENT_FIRST_NAME: bob
CLIENT_LAST_NAME: smith
CLIENT_MIDDLE_NAME: michael
所以我使用 do 循环遍历每个文件并将变量设置为值 例如:
for f in $FILES
do
FIRSTNAME=$(yq r $f CLIENT_FIRST_NAME)
LASTNAME=$(yq r $f CLIENT_LAST_NAME)
add client --firstname=${FIRSTNAME} --lastname=${LASTNAME}
done
但有时我会有那个中间名,我需要包括:
add client --firstname=${FIRSTNAME} --lastname=${LASTNAME} --middlename=${MIDDLENAME}
顺序无关紧要,我只需要考虑可能出现在需要添加到“添加客户端”命令的 yaml 中的其他字段。 yaml 中的每一行都将添加到命令中。添加的每个键都将是“添加客户端”命令的可行参数。我不必担心 yaml 中的键是否是有效参数。他们会的。
对这里未知的最佳方法感到好奇。谢谢!
【问题讨论】:
-
for f in $FILES已经是一个严重的问题了。您不能安全地将 list 文件存储在 string 变量中。请记住,文件名可以包含空格、换行符、全局字符等;并且扩展$FILES正在通过字符串拆分和全局扩展运行。 -
顺便说一句,将
r视为子命令的yq是哪个版本?你不是说-r吗? -
我使用的是最新版本的yq:3.3.0。它在 README 中使用 'r' 作为有效的子命令,并且到目前为止一直有效。
-
啊,我们使用了两个完全不同的程序,名为
yq。我的答案是针对 github.com/kislyuk/yq 的版本 2.8.1 编写和测试的。