我的人数很多,我想进行公元前的计算。 示例:
T_Mab = 6.00899e+09
我想这样打印:
echo 'T_Mab = '${T_Mab}' [s] = '${T_Mab}/31557600' [year]' | bc -l
它给我“语法错误”。那我该怎么办呢?
答案 0 :(得分:1)
您不能只编写要显示的内容并将其转储到bc
。另一个问题是bc
不接受科学计数法。查看[How to get bc to handle numbers in scientific (aka exponential) notation?了解详情。
假设该数字已经按照链接问题中的答案转换为正确的格式,则可以在bash
中这样写。
T_Mab=6008990000
echo "${T_Mab} [s] = $(bc -l <<< ${T_Mab}/31557600) [year]"
从bash
3.0开始添加了字符串,如果您使用的是旧版本,则只需使用$(echo ${T_Mab}/31557600|bc -l)
。
说了这么多,如果不需要任意精度,您确实应该考虑链接问题第二个答案中建议的bc
替代方案。
答案 1 :(得分:0)
语法错误是因为bc
不读“ e”表示法,并且可以通过一个大大简化的示例来复制它:
$ bc -l <<<"6.00899e+09"
(standard_in) 1: syntax error
我们需要更改为它确实理解的语法;我们可以在Bash中做到这一点:
v=6.00899e+09
v=${v/e/*10^} # 6.00899*10^+09
v=${v/^+/^} # 6.00899*10^09
bc -l <<<"($v)"
6008990000.00000
或者只是通过可以理解该符号的工具进行清洗:
printf '%f\n' "$v" | bc -l