我有以下JSON文件:
{
"1":
{
"media_content":"test3.xspf"
},
"2":
{
"media_content":"test3.xspf"
}
}在终端中,使用bash作为shell,我可以执行以下命令:
export schedules="1"
echo $(jq '.[env.schedules]["media_content"]' json_file.json)其结果是输出:
test3.xspf因此,它按预期工作,但当我将jq命令放入脚本并运行它时,它只返回null。我确实回显了计划的值,以确保脚本中的值为非空值,这是可以的:
echo $schedules但是我没有找到原因,为什么这个命令在shell中直接运行时工作,而在脚本中运行时不工作。
我以以下方式运行该脚本:
bash script.sh
./script.shPS:是的,我确实提供了执行许可:chmod +x script.sh
提示:env.schedules表示环境变量“计划”,在调用jq之前,我确实确保在脚本中分配了它。
编辑:我现在发布一个完整的脚本,指定文件树。
有一个目录,其中包括:
script.sh:
export zone=$(cat static.json | jq '.["1"]');
echo "json block: "$zone
export schedules="$(echo $zone | jq '.schedules')"
echo "environment variable: "$schedules
export media_content=$(jq '.[env.schedules]["media_content"]' json_file.json)
echo "What I want to get: \"test3.xspf\""
echo "What I get: "$media_contentjson_file.json:
{
"1":
{
"media_content":"test3.xspf"
},
"2":
{
"media_content":"test3.xspf"
}
}static.json:
{
"1":
{
"x": "0",
"y": "0",
"width": "960",
"height": "540",
"schedules":"1"
}
}如果我运行这个脚本,它会显示:
json block: { "x": "0", "y": "0", "width": "960", "height": "540", "schedules": "1" }
environment variable: "1"
What I want to get: "test3.xspf"
What I get: null如果我硬编码变量:
export schedules="1" 这个问题不再发生。
发布于 2020-06-30 09:45:07
问题很简单。
这不是jq的错。
这是调度值传递到下一个命令的不恰当的方式。
您必须删除围绕变量值的"s“,添加第二个使用sed进行操作的命令:
export schedules="$(echo $zone | jq '.schedules')"
schedules=$( echo $schedules | sed s/\"//g )长答案让我们看看:
在这里,计划是一个字符串,echo将其值显示为1:
export schedules="1" ; echo $schedules 在这里,即使没有提到双引号:
export schedules=1 ; echo $schedules 但是由此产生的结果也会产生额外的“s”:
export schedules=$(echo $zone | jq '.schedules')如果您现在打印它,您将看到其他“s”:
echo $schedules # "1"因此,只需从值中删除"s“:
schedules=$( echo $schedules | sed s/\"//g )https://stackoverflow.com/questions/62651799
复制相似问题