Если в вашей оболочке установлено 3 переменные, например:
pd_f=1
d_f=2
fr_numb=3
и вы запускаете оригинальную команду:
set r_m=`echo "scale=6; $pd_f*$d_f*(1/sqrt(3))+($fr_numb-1)*($pd_f*$d_f*(1/sqrt(3))+$pd_f*$d_f*0.5*(s(3.14159265*30/180)/c(3.14159265*30/180)))+0.4"|bc -l`
, тогда вы получите $1
, установленный на r_m=5.018798
(а все остальные позиционные параметры не определены). Это связано с тем, что в bash
и во всех других производных оболочки Bourne оператор set
используется для настройки параметров оболочки или установки значений позиционных параметров, $1
, $2
, ... и т. Д. (Но не $0
).
Если у вас нет значений для трех переменных, вы получите синтаксические ошибки, диагностированные с помощью bc
.
Обратите внимание, особенно, что исходная команда не устанавливает переменную r_m
; это будет только установить переменную в оболочке C или производной оболочки C. На переменную оболочки $r_m
оператор set
совершенно не влияет. В результате в $r_m
вы увидели то, что осталось в переменной из вашего предыдущего эксперимента.
С другой стороны, когда вы запускаете:
r_m=`echo "scale=6; $pd_f*$d_f*(1/sqrt(3))+($fr_numb-1)*($pd_f*$d_f*(1/sqrt(3))+$pd_f*$d_f*0.5*(s(3.14159265*30/180)/c(3.14159265*30/180)))+0.4"|bc -l`
затем вы присваиваете переменную r_m
.