我在bash中使用以下命令减去2个数字并打印结果。同时使用bc
工具
printf '\n"runtime": %s' "$(($a - $b) | bc -l)"
但是收到错误
1517359690.775414500: command not found
我应该如何重写printf
命令?
答案 0 :(得分:4)
如果你的shell是bash,那么这可能是:
printf '\n"runtime": %s' "$(bc -l <<<"($a - $b)")"
如果你的shell是sh,那么这可能是:
printf '\n"runtime": %s' "$(echo "($a - $b)" | bc -l)"
请注意,我们正在调用一个单独的命令 - echo
- 其输出通过管道输入bc
,而不是尝试将这些数字作为命令运行。
但是,您不应该首先使用printf
创建JSON文档。
相反,请使用jq
:
start=5.5; stop=6.10
other_value='this is an example string
it crosses multiple lines, and has "literal quotes" within it'
jq -nc \
--argjson start "$start" \
--argjson stop "$stop" \
--arg other_value "$other_value" \
'{"runtime": ($stop - $start), "other key": $other_value}'
您需要注意,此处的字符串已正确转义为包含在JSON中:"
更改为\"
,文字换行符更改为\n
,因此类推。