【发布时间】:2018-05-08 21:35:00
【问题描述】:
我在尝试创建一个字符串时遇到了很多麻烦,该字符串是一个数组连接的结果,每次通过循环时都会加一点
# HERE IS THE VALUE OF CHANGELOG.JSON
# [
# 13,
# 14,
# 22
# ]
readarray -t lines <<<"$(cat $1/changelog.json | jq '.[]')"
echo "check if my array is filled"
echo ${lines[0]}
echo ${lines[1]}
echo ${lines[2]}
echo "my array is correctly filled.."
for i in ${!lines[@]}
do
var2="$var2 | jq '.[$((($i+1)))]=${lines[$i]}'"
echo "my var2 during loop: $var2"
done
echo "my var2 after loop $var2"
由于某些原因,这个脚本给了我这个作为输出
$ /bin/bash add-changelog.sh Blupods-front-v3/
check if my array is filled
13
14
22
my array is correctly filled..
'y var2 during loop: | jq '.[1]=13
' | jq '.[2]=14loop: | jq '.[1]=13
' | jq '.[3]=22'oop: | jq '.[1]=13
' | jq '.[3]=22'op | jq '.[1]=13
你们知道我怎样才能让它工作吗?我已经经历了很多关于stackoverflow的解决方案,但没有一个有效(使用+=进行连接)我听说过其他问题,这是因为for/while循环创建了一个子shell,但即使在循环变量不会被记住。我也没有任何管道,除了读取数组。
编辑:在这里我添加我的预期结果,也许它会帮助你们帮助我 我不是想马上执行这个命令,我只是想在 for 循环中连接一个字符串,预期的结果应该是这个
echo $var2
| jq '.[1]=13' | jq '.[2]=14 | jq '.[3]=22'
【问题讨论】:
-
var2="$var2 | jq '.[$((($i+1)))]=${lines[$i]}'"应该做什么? var2 的初始值是多少?如果这是您所期望的,那么该分配将不会执行管道。它只会将整个字符串分配给 var2,而不是管道执行的结果。您需要$(...)来执行管道。 -
我不想立即执行它,我想连接该字符串并只在最后的循环之外执行它(这样做的最终目标是更新 json 文件)有var2 没有初始值
-
请查看编辑以了解我想要实现的目标
-
你想对
$var2做什么?可能有一个解决方案不需要动态生成对jq的多次调用的管道。 -
像
jq --slurpfile cl changelog.json '.[:3] = $cl[]' original.json这样的东西可能会做你想做的事。
标签: arrays string bash loops concatenation