bash --version
GNU bash, version 5.1.16(1)-release (x86_64-apple-darwin21.1.0)
温度(c)と湿度(%)で露点を定義するbc計算を含むスクリプト(露点)を呼び出します。私が受け取った応答(-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);"