【发布时间】:2019-01-14 15:51:39
【问题描述】:
试图找出 jq 的语法。 这条线工作得很好:
echo $(cat ../post-auth/rkt-auth.json | jq -c --arg user ${vsphere_user} '.credentials.user = $user') > ../post-auth/rkt-auth.json
但是,当变量是 json 路径的一部分时,情况并非如此:
echo $(cat ../post-auth/docker-auth.json | jq -c --arg basejq ${base} --arg tempvarjq ${tempvar} '.auths.$tempvarjq.auth= $basejq') > ../post-auth/docker-auth.json
错误:
jq: error: syntax error, unexpected '$', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
.auths.$tempvarjq.auth= $basejq
jq: 1 compile error
任何建议如何使用该变量更正此语法?
【问题讨论】:
-
这是useless use of
echo和uselesscat顺便说一句。 -
另外,如果您的输入文件与输出文件相同,则为bound to cause some issues
-
echo "$(cat file)" >file不能保证在写入之前完成所有读取。许多 shell 将在运行重定向之前运行命令替换,但这并不是 POSIX 标准的可靠保证,不应依赖它。 (此外,即使您的 shell 确实 遵循该操作顺序,这意味着失败的cat运行仍将调用echo,因此您的文件将被空白而不是单独留在发生错误)。