首页 > 解决方案 > 通过 Shell 脚本读取 JSON 文件并替换密钥

问题描述

我是 Shell 脚本的新手,我需要通过 shell 脚本读取本地 JSON 文件,并希望找到并替换所有键

JSON文件

{
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}

外壳脚本.sh

path="./path.json"
# arr=("key1" "key2" "key3")   // this works fine
mapfile -t arr < <(./jq -r 'keys[]' $path) // not working

for elem in "${arr[@]}"
do
sed -i "s/${elem}/MyNewKey/g" $path
done

在这里,硬编码数组和从mapfile实用程序生成的数组有什么区别?

如果我arr以两种方式回显,则两者在控制台中看起来都相同。

有人可以帮助我了解有什么区别吗?

标签: jsonshell

解决方案


尝试sed -i "s/$elem/MyNewKey/g" $path
您必须以这种方式引用 elem,因为它不是数组。它是数组的特定元素。通常,您通过在其前面放置 $ 来引用 for 循环变量。

对于有关 for 循环的简单示例,我发现很有帮助。


推荐阅读