我正在创建一个简单的bash脚本,我有一个curl请求,如果objects_count不为空,我只想在原始数据体中发送它。我知道这行代码是有效的:'[ ! -z "$objects_count" ] && echo "not empty"'个然而,当我在curl请求中实现它时,我得到一个错误第一个
objects_count
'[ ! -z "$objects_count" ] && echo "not empty"'
wbrvyc0a1#
Bash没有可在表达式中使用的条件运算符。请使用简单的if语句将变量设置为要发送的数据。
if
if [ -z "$objects_count" ] then data='{"objects":'$objects'}' else data='{"objects":'$objects', "objects_count":'$objects_count'}' fi curl --location --request POST 'http://0.0.0.0:5000' \ --header 'Content-Type: application/json' \ --data-raw "$data"
x33g5p2x2#
你不能在表达式中间使用这样的表达式。如果你真的想要一个表达式,你需要一个子shell,在子shell echo中你想要的字符串:
echo
curl --location --request POST 'http://0.0.0.0:5000' \ --header 'Content-Type: application/json' \ --data-raw '{ "objects":'$objects', '$([ ! -z "$objects_count" ] && echo '"objects_count":'$objects_count)' }'
然而,使用参数替换有一个技巧,你可以扩展一个字符串,只有一个变量不是空的(或未设置):
echo ${objects_count:+non empty}
那么就不需要表达式了:
curl --location --request POST 'http://0.0.0.0:5000' \ --header 'Content-Type: application/json' \ --data-raw '{ "objects":'$objects', '${objects_count:+'"objects_count":'$objects_count}' }'
我不明白为什么需要有选择地输出这个元素,在JSON中,通常可以只输出"object_counts": null或类似的内容。顺便说一句,你可以只做[ -n $foo ],而不是做[ ! -z "$foo" ]。
"object_counts": null
[ -n $foo ]
[ ! -z "$foo" ]
2条答案
按热度按时间wbrvyc0a1#
Bash没有可在表达式中使用的条件运算符。请使用简单的
if
语句将变量设置为要发送的数据。x33g5p2x2#
你不能在表达式中间使用这样的表达式。如果你真的想要一个表达式,你需要一个子shell,在子shell
echo
中你想要的字符串:然而,使用参数替换有一个技巧,你可以扩展一个字符串,只有一个变量不是空的(或未设置):
那么就不需要表达式了:
我不明白为什么需要有选择地输出这个元素,在JSON中,通常可以只输出
"object_counts": null
或类似的内容。顺便说一句,你可以只做
[ -n $foo ]
,而不是做[ ! -z "$foo" ]
。