比如命令 echo "12+5" | bc
会得出结果 17。
试了在 buffer 中选中 12+5
再用 M-|
(shell-command-on-region
) 运行 bc
命令,会提示下面的错误:
(standard_in) 1: syntax error
错误的原因是什么?应该怎么做才能得到结果?
比如命令 echo "12+5" | bc
会得出结果 17。
试了在 buffer 中选中 12+5
再用 M-|
(shell-command-on-region
) 运行 bc
命令,会提示下面的错误:
(standard_in) 1: syntax error
错误的原因是什么?应该怎么做才能得到结果?
bc 只接受标准输入和文件名作为参数,不支持 bc "expr"
。
可以封装一个 bc-region
函数,实现参数转换 (shell-command "echo $region | bc")
。
或者封装一个通用的函数,用来执行所有类似的命令 (shell-command "echo $region | $command")
。
请教一下,literate-calc-mode是怎么用的,刚刚装上,一脸懵逼。。。
很有意思,谢谢推荐。
但是 wc
命令同样是不支持 wc "text"
,却可以得到结果,这又是为什么呢?
差别在 bc
需要一个回车符作为确认:
(with-temp-buffer
(insert "1+2\n")
(call-process-region (point-min) (point-max) "bc" t t)
(buffer-string))
;; => "3"
(with-temp-buffer
(insert "1+2")
(call-process-region (point-min) (point-max) "bc" t t)
(buffer-string))
;; => "(standard_in) 1: parse error"
(with-temp-buffer
(insert "1+2\n")
(call-process-region (point-min) (point-max) "wc" t t)
(buffer-string))
;; => " 1 1 4"
(with-temp-buffer
(insert "1+2")
(call-process-region (point-min) (point-max) "wc" t t)
(buffer-string))
;; => " 0 1 3"
可以在终端上验证:
$ bc
1+2
需要按回车才会进行计算。
所以,另一个解决方案就是用 advice 给 bc 命令补回车。