首页 > 解决方案 > jq:错误:TOKEN/0 未定义于,第 1 行:

问题描述

下面是 JSON 文件:

{
    "awsIAMCred" : "replaceme",
    "DatabaseName" : "replaceme"
}

下面是 bash 文件:

#!/bin/bash

echo BEGIN
date '+%Y-%m-%d %H:%M:%S'

TOKEN=mouse

touch connector.json

yum -y install moreutils            
yum -y install nano
yum -y install nc
echo install of nano,nc and moreutils are done
chmod 660 connector.json

jq '.awsIAMCred = "hello"' connector.json|sponge connector.json
jq '.DatabaseName = $TOKEN' connector.json|sponge connector.json
cat connector.json

我得到了这个例外:

jq:错误:TOKEN/0 未在第 1 行定义:

请帮忙。

标签: bashenvironment-variablesjq

解决方案


正如评论中指出的那样,可以使问题中 jq 的第二次调用起作用,但使用字符串插值通常被认为是最好避免的反模式。有许多替代方案,例如:

jq --arg token "$TOKEN" '.DatabaseName = $token' connector.json

还请注意,这两个更新都可以并且也许应该通过一次 jq 调用来执行,例如:

jq --arg token "$TOKEN" '.awsIAMCred = "hello" | .DatabaseName = $token' connector.json

推荐阅读