我有一个使用jq
命令创建的JSON文件。该文件是这样的:
[
{
"description": "",
"app": "hello-test-app"
},
{
"description": "",
"app": "hello-world-app"
}
]
我想有一个简单的if / else条件来检查描述是否为空。我尝试了不同的方法,但是都没有用!我试过了:
jq -c '.[]' input.json | while read i; do
description=$(echo $i | jq '.description')
if [[ "$description" == "" ]];
then
echo "$description is empty"
fi
done
并且具有相同的代码,但是如果/否则;
if [[ -z "$description" ]];
then
echo "$description is empty"
fi
有人能帮我吗?
jq支持条件句。无需将其恢复为bash(尚未):
< foo jq -r '.[] | if .description == ""
then "description is empty"
else .description end'
description is empty
description is empty
如果您坚持用管道传输回bash,这是正在发生的事情:
jq -c '.[]' foo | while read i; do description=$(echo $i | jq '.description')
printf '%s\n' "$description"
done
""
""
你可以在这里看到的扩张$description
是不是空的。每次实际上都是一对引号。
在这里使用bash进行管道处理存在几个问题-的无引号扩展$i
,复制为jq
引号并将其转换为两种不同编程语言之间的空字符串。但是我想简单的答案是“只是测试是否"$description"
扩展为一对引号。”
在bash中测试报价意味着引用您的报价:
if [[ $description = '""' ]]; then
echo '$description expands to a pair of quotes'
fi
我认为,更好的答案是将工作保留在jq中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句