
Quero, por exemplo, dividir todos os números inteiros de 1 a 5 por 8 e colocá-los em uma matriz. Eu estava pensando em algo semelhante ao código abaixo, mas tenho certeza que está errado e sujo:
COUNTER=0
until [ $COUNTER -lt 8 ]; do
${steps[$COUNTER]}=1+(5-1)/8*$COUNTER
let COUNTER+=1
done
Existe alguma maneira de fazer isso de forma limpa se meu código estiver correto?
Responder1
O seq
comando pode incrementar em um float:
declare -a steps=($(seq 1 .5 5))
Você pode obter o incremento comecho 'scale=1;(5-1)/8'|bc
Responder2
Sim, mas como o bash não faz aritmética de ponto flutuante, você precisará usar outra ferramenta e salvar sua saída no array bash. Por exemplo:
$ perl -le 'print $_/8 for 1..5'
0.125
0.25
0.375
0.5
0.625
Salve em um array com:
array=( $(perl -le 'print $_/8 for 1..5') )
Responder3
bash
só pode fazer aritmética inteira. Use bc
para carros alegóricos:
from=1
to=5
steps=8
for c in $(seq 0 $steps) ; do
ar[c]=$(echo $(bc -l <<< "$from + ($to - $from) / $steps * $c"))
done
echo "${ar[@]}"