print中的printf命令抛出错误

时间:2018-01-31 00:51:27

标签: bash shell awk printf

我在bash中使用以下命令减去2个数字并打印结果。同时使用bc工具

printf '\n"runtime": %s' "$(($a - $b) | bc -l)"

但是收到错误

1517359690.775414500: command not found

我应该如何重写printf命令?

1 个答案:

答案 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,因此类推。