
예를 들어 1부터 5까지의 모든 정수를 8로 나누어 배열에 넣고 싶습니다. 나는 아래 코드와 비슷한 것을 생각하고 있었지만 그것이 잘못되고 더러운 것이라고 확신합니다.
COUNTER=0
until [ $COUNTER -lt 8 ]; do
${steps[$COUNTER]}=1+(5-1)/8*$COUNTER
let COUNTER+=1
done
내 코드가 전혀 정확하다면 이 작업을 깔끔하게 수행할 수 있습니까?
답변1
명령 은 seq
부동소수점만큼 증가할 수 있습니다.
declare -a steps=($(seq 1 .5 5))
당신은 증가분을 얻을 수 있습니다echo 'scale=1;(5-1)/8'|bc
답변2
예, 하지만 bash는 부동 소수점 연산을 수행하지 않으므로 다른 도구를 사용하고 bash 배열에 출력을 저장해야 합니다. 예를 들어:
$ perl -le 'print $_/8 for 1..5'
0.125
0.25
0.375
0.5
0.625
다음을 사용하여 배열에 저장합니다.
array=( $(perl -le 'print $_/8 for 1..5') )
답변3
bash
정수 연산만 할 수 있습니다. bc
수레에 사용 :
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[@]}"