De fato, como @Jan mencionou, você pode usar printf com% e. @ Mencionaremos a opção% g, mas isso não é necessariamente uma notação científica (veja abaixo).
É baseado no printf de C que você já conhece.
CPU_FREQ=$(printf "%e" $(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq))
O comando
printf funciona assim:
var=1
printf "print a float variable %f, or an integer literal. %d" $var 2
Você pode usar% g,% e,% G ou% E.
também, com parâmetros inteiros literais extras opcionais a, b, por exemplo:% a.bf
Resumidamente,
o parâmetro opcional a é o tamanho mínimo de largura (que é ignorado se for encaminhado a saída em uma variável).
% .é imprime com exatamente b decimais, arredondando o preenchimento com zeros, se necessário.
% .bg imprime o resultado com números significativos, ignorando todos os zeros à direita. (Também pode ser pensado como o menor entre% f e% e dois, mas vale a pena notar novamente, é sem zeros à direita).
Exemplos:
R=10000001
printf "%e\n" $R
1.000000e+07
printf "%g\n" $R
1e+07
R=1.0000001
printf "%e\n" $R
1.000000e+00
printf "%g\n" $R
1
R=1000000.1
printf "%e\n" $R
1.000000e+06
printf "%g\n" $R
1e+06
R=.10000001
printf "%e\n" $R
1.000000e-01
printf "%g\n" $R
0.1
(% G e% E são como% g e% e, mas imprimem a saída em maiúsculas, o que se aplica apenas ao e que se transforma em um E.)