bc 출력에서 ​​줄 바꿈을 방지하는 방법

bc 출력에서 ​​줄 바꿈을 방지하는 방법

GNU v.1.06에는 다음 예가 있습니다(줄 길이와 관련된 제한을 인식하지 못합니다).

v=$(bc -l <<<"scale=100;4*a(1)"); echo $v

반품:

3.141592653589793238462643383279502884197169399375105820974944592307\ 
8164062862089986280348253421170676

이 함수의 출력에서 ​​백슬래시와 캐리지 리턴을 제거할 수 있습니까? 아니면 존재하지 않는 것을 찾고 있습니까?

답변1

적어도 GNU에서는 환경 변수를 0 값으로 bc설정할 수 있습니다 .BC_LINE_LENGTH

BC_LINE_LENGTH=0 bc -l <<<"scale=100;4*a(1)"

에서 man bc:

BC_LINE_LENGTH
       This should be an integer specifying the number of characters in
       an  output  line  for  numbers.  This includes the backslash and
       newline characters for long numbers.  As an extension, the value
       of  zero  disables  the  multi-line feature.  Any other value of
       this variable that is less than 3 sets the line length to 70.

답변2

GNU 구현을 사용하면 bc버전 1.07부터 다음을 사용하여 BC_LINE_LENGTH=0( DC_LINE_LENGTH=0GNU의 경우 dc) 개행을 완전히 비활성화 할 수 있습니다. 이전 버전의 GNU의 경우 (또는 표시될 것으로 예상되는 숫자의 최대 크기보다 큰 값)을 bc사용할 수 있습니다 .BC_LINE_LENGTH=9999

BC_LINE_LENGTH=9999 bc -l <<< 'scale=100;4*a(1)'

다른 구현의 경우 대신 다음으로 파이프할 수 있습니다.

perl -pe 's/\\\n\z//'

또는

sed -e :1 -e '/\\$/{N;s/\\\n//;b1' -e '}'

또는

awk '{if (sub(/\\$/, "")) printf "%s", $0; else print}'

또는 (골프 버전):

awk '{ORS=sub(/\\$/,"")?"":RS};1'

그러나 일부 시스템에서는 텍스트 유틸리티가 특정 최대값( getconf LINE_MAX1024바이트만큼 낮을 수 있음)보다 큰 행을 지원하지 않는다는 점에 유의하십시오.

관련 정보