【发布时间】:2018-02-26 15:04:25
【问题描述】:
我对 shell 完全陌生......让我说出正确的用例。 用例:- 我在我的 shell 脚本中编写了两个 get 方法,当用户调用该脚本时,我将使用 for 循环对许多 id 执行一些操作。如下所示
test_get1(){
value1=//performing some operation and storing it
value2=//performing some operation and storing it
//below line I am converting the o/p of value1 and value2 in json
value=$JQ_TOOL -n --arg key1 "$value1" --arg key2 "$value2" '{"key1":"\($value1)","key2":"\($value2)"}'
}
test_get2(){
arr=(1,2,3)
local arr_values=()
for value in arr
do
// Calling test_get1 for each iteraion of this loop, like below
val=$(test_get1 $value)
//below line will store the values in array
arr_values+=("$val")
done
}
当我为上述 arr_values 做回显时,我得到以下输出 输出。
arr_values={
"key1":"value1",
"key2":"value2"
}
{
"key1":"value1",
"key2":"value2"
}
我想把上面的值转换成下面这样的json格式。
json_value=[
{
"key1":"value1",
"key2":"value2"
},
{
"key1":"value1",
"key2":"value2"
}
]
我尝试用 JQ 来做,但无法得到正确的结果。
【问题讨论】:
-
发布实际有效的输入json结构
-
您的输入
arr_values甚至不是有效的 JSON -
@RomanPerekhrest 我已经更新了问题
-
@umesh、
LS=/usr/bin/ls和类似的东西是一种反模式——这种不好的做法被人们复制了他们在为 1970 年代编写的脚本中看到的东西而没有缓存 PATH 查找。这里绝对没有任何价值——如果你需要覆盖jq,你最好定义一个包装函数;使用变量只会降低可读性,并且(如果该变量包含绝对路径)会降低跨机器的可移植性。 -
(...而如果您的目标是在 crond 的默认 PATH 不包含本地
jq二进制文件的位置的系统上从 cron 作业运行,那么正确的做法是 在您的 crontab 文件中定义一个 PATH;即在规范之前放置一行PATH=/bin:/usr/bin:/usr/local/bin。