Bash 스크립트에서 두 이미지 너비를 나누려고하지만 bash는 나에게 0
결과를 제공합니다.
RESULT=$(($IMG_WIDTH/$IMG2_WIDTH))
나는 Bash 가이드를 공부 bc
했고 인터넷에서 사용 하는 모든 예제에서 사용해야한다는 것을 알고있다 bc
. 에echo
내에서 같은 일을 넣어 시도 SCALE
했지만 작동하지 않았다.
튜토리얼에서 찾은 예제는 다음과 같습니다.
echo "scale=2; ${userinput}" | bc
Bash가 어떻게 플로트를 줄 수 0.5
있습니까?
답변
당신은 할 수 없습니다. bash는 단지 정수를 않습니다; 당신은 해야한다 와 같은 도구에 위임 bc
.
답변
당신은 이것을 할 수 있습니다 :
bc <<< 'scale=2; 100/3'
33.33
업데이트 20130926
: 당신은 사용할 수 있습니다 :
bc -l <<< '100/3' # saves a few hits
답변
세게 때리다
다른 사람들이 지적했듯이 bash
부동 소수점 산술을 지원하지 않지만 소수 자릿수와 같은 고정 소수점 속임수로 위조 할 수는 있습니다 (예 : 두 개의 소수점 이하)
echo $(( 100 * 1 / 3 )) | sed 's/..$/.&/'
산출:
.33
참조 Nilfred의 대답을비슷하지만 더 간결한 접근법에 을 .
대안
언급 bc
및 awk
대안 외에도 다음이 있습니다.
절정
clisp -x '(/ 1.0 3)'
정리 된 출력으로 :
clisp --quiet -x '(/ 1.0 3)'
또는 stdin을 통해 :
echo '(/ 1.0 3)' | clisp --quiet | tail -n1
dc
echo 2k 1 3 /p | dc
천재 cli 계산기
echo 1/3.0 | genius
고스트 스크립트
echo 1 3 div = | gs -dNODISPLAY -dQUIET | sed -n '1s/.*>//p'
gnuplot
echo 'pr 1/3.' | gnuplot
jq
echo 1/3 | jq -nf /dev/stdin
또는:
jq -n 1/3
ksh
echo 'print $(( 1/3. ))' | ksh
루아
lua -e 'print(1/3)'
또는 stdin을 통해 :
echo 'print(1/3)' | lua
맥시마
echo '1/3,numer;' | maxima
정리 된 출력으로 :
echo '1/3,numer;' | maxima --quiet | sed -En '2s/[^ ]+ [^ ]+ +//p'
마디
echo 1/3 | node -p
옥타브
echo 1/3 | octave
펄
echo print 1/3 | perl
python2
echo print 1/3. | python2
python3
echo 'print(1/3)' | python3
아르 자형
echo 1/3 | R --no-save
정리 된 출력으로 :
echo 1/3 | R --vanilla --quiet | sed -n '2s/.* //p'
루비
echo print 1/3.0 | ruby
wcalc
echo 1/3 | wcalc
정리 된 출력으로 :
echo 1/3 | wcalc | tr -d ' ' | cut -d= -f2
zsh
echo 'print $(( 1/3. ))' | zsh
단위
units 1/3
컴팩트 한 출력으로 :
units --co 1/3
다른 출처
Stéphane Chazelas 는 Unix.SX 에서 비슷한 질문에 답변 했습니다.
답변
marvin의 답변을 조금 개선 :
RESULT=$(awk "BEGIN {printf \"%.2f\",${IMG_WIDTH}/${IMG2_WIDTH}}")
bc가 항상 설치된 패키지로 제공되는 것은 아닙니다.
답변
-l
옵션으로 bc를 사용할 수 있습니다 (L 문자)
RESULT=$(echo "$IMG_WIDTH/$IMG2_WIDTH" | bc -l)
답변
bc의 대안으로 스크립트 내에서 awk를 사용할 수 있습니다.
예를 들면 다음과 같습니다.
echo "$IMG_WIDTH $IMG2_WIDTH" | awk '{printf "%.2f \n", $1/$2}'
위의 “% .2f”는 소수점 이하 두 자리의 부동 소수점 숫자를 반환하도록 printf 함수에 지시합니다. awk가 올바르게 작동하기 때문에 echo를 사용하여 변수를 필드로 파이프했습니다. “$ 1″및 “$ 2″는 awk에 입력 된 첫 번째 및 두 번째 필드를 나타냅니다.
그리고 다음을 사용하여 결과를 다른 변수로 저장할 수 있습니다.
RESULT = `echo ...`
답변
부동 소수점 수학을 포함한 많은 추가 기능을 갖춘 (거의) bash 수퍼 세트 인 zsh를 사용해 볼 수있는 완벽한 시간입니다. 다음은 zsh의 예제와 같습니다.
% IMG_WIDTH=1080
% IMG2_WIDTH=640
% result=$((IMG_WIDTH*1.0/IMG2_WIDTH))
% echo $result
1.6875
이 게시물은 당신을 도울 수 있습니다 : bash-캐주얼 사용을 위해 zsh로 전환 할 가치가 있습니까?