![bash 변수는 명령 대체에서 이상한 16진수 데이터를 가져오고 bc 계산이 포함된 스크립트를 호출합니다.](https://linux55.com/image/201492/bash%20%EB%B3%80%EC%88%98%EB%8A%94%20%EB%AA%85%EB%A0%B9%20%EB%8C%80%EC%B2%B4%EC%97%90%EC%84%9C%20%EC%9D%B4%EC%83%81%ED%95%9C%2016%EC%A7%84%EC%88%98%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B3%A0%20bc%20%EA%B3%84%EC%82%B0%EC%9D%B4%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%ED%98%B8%EC%B6%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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);"