【发布时间】:2021-06-02 10:32:31
【问题描述】:
我正在尝试使用 jq 从 json 文件中读取命令。 虽然我能够根据要求读取内容,但目前面临的唯一问题是,在从 json 数组获取值后,每个字符串值都会自动拆分一个空间,该空间将字符串的内容划分为 n 个值而不是一个。
JSON 文件
{
"baseVersion": "abc",
"patches": [{
"version": "122",
"description": "This patch contains fixes blah blah blah ",
"iBuild": "60",
"files": [{
"fullPath": "20.6.I60.jar",
"nodeTypes": [
"a",
"b"
],
"productTypes": ["a", "b"],
"restart": "true",
"service_commands": [{
"node_name": ["a"],
"command": ["ls","date","demo"]
},{
"node_name": ["b"],
"command": ["singleline command00"]
}]
}]
}]}
读取内容的代码
#!/bin/bash
trap 'Exit 1' INT TERM
umask 022
getServiceRestartForNode()
{
local patchConfFile="/pathto/patch_conf.json"
local query='.patches[] | .version as $v'
query+=' | .files[] | .service_commands[] |.command[]'
local outputCommands=($(jq -cr "$query" "$patchConfFile"))
local result=${PIPESTATUS[0]}
if [ "$result" -ne 0 ]
then
Display -e "ERROR: Error listing files (error code: '$result')"
return 1
else
echo "${outputCommands[@]}"
for servicecommand in "${outputCommands[@]}"
do
"$servicecommand"
# if [[ "$?" -ne 0 ]]
# then
# display "0" "command $servicecommand failed."
# fi
done
fi
return 0
}
if [[ $1 = "-o" ]]; then
echo "Option -o turned on"
getServiceRestartForNode
else
echo "You did not use option -o"
fi
电流输出
Option -o turned on
ls date demo singleline command
a.out demo.sh patch_conf.json
Wed Jun 2 16:29:23 IST 2021
demo.sh: line 26: demo: command not found
demo.sh: line 26: singleline : command not found
预期输出
Option -o turned on
ls date demo singleline command00
a.out demo.sh patch_conf.json
Wed Jun 2 16:29:23 IST 2021
demo.sh: line 26: demo : command not found
demo.sh: line 26: singleline command00 : command not found
最后执行的“单行”,但应该是“单行命令”。
提前谢谢你
【问题讨论】:
-
引用所有的 shell 变量/数组扩展
-
@Inian 完成,请立即查看。