bash 变量从命令替换中获取一些奇怪的十六进制数据,调用包含 bc 计算的脚本

bash 变量从命令替换中获取一些奇怪的十六进制数据,调用包含 bc 计算的脚本
bash --version
GNU bash, version 5.1.16(1)-release (x86_64-apple-darwin21.1.0)

我正在调用一个脚本(露点),其中包含一个 bc 计算,该计算根据温度(c)和湿度(%)定义露点。我收到的响应 (-17.1) 看起来不错,但将其传递到另一个将其转换为 temp(f) 的 bc 脚本会导致以下错误。

(standard_in) 1: illegal character: ^[
(standard_in) 1: illegal character: ^[
(standard_in) 1: parse error
(standard_in) 1: parse error

罪魁祸首似乎???调用露点时分配的变量 (dpC)

dpC=$(dewpoint -5 38)
declare -p dpC
printf '%s' "$dpC" | hexdump -C
declare -- dpC="-17.1"
00000000  1b 28 42 1b 5b 6d 2d 31  37 2e 31                 |.(B.[m-17.1|
0000000b

我不知道“1b 28 42 1b 5b 6d”来自什么或哪里。
我可以清理它dpC=${dpC//[^[:digit:].+-]/} ,但我不想在每次调用露点后都执行此操作(我什至尝试将其添加到露点,同时使用 echo 和 printf,但无济于事。我希望我清楚地说明了问题。任何人都有线索这是怎么回事?

露点:

#!/usr/bin/env bash
bc -l <<< "define pa (n) {
         if (n >= 0.0) {
            return (7.5);
         } else {
            return (7.6);
         }
      }

      define pb (n) {
         if (n >= 0.0) {
            return (237.3);
         } else {
            return (240.7);
         }
      }

      define sdd (t) {
         return (6.1078 * e( l(10) * ((pa(t) * t) / (pb(t) + t)) ) );
      }

      define dd (r,t) {
         return (r / 100.0 * sdd(t));
      }

      /* factor 2.302585093 converts ln() to log() */
      v  = l(dd($2,$1) / 6.1078) / 2.302585093;
      tp = ((pb($1) * v) / (pa($1) - v));

      if ( tp >= 0.0 ) {
         tp = (tp + 0.05);
      } else {
         tp = (tp - 0.05);
      }

      scale = 1;
      (tp / 1.0);"

相关内容