| HOME / 정보공유 / AIX 명령어 모음

bc
bc bc 명령 목적 임의의 정밀도 산술 언어에 대한 해석기를 제공합니다. 구문
bc [ -c ] [ -l ] [ File ... ]
설명
bc 명령은 임의의 정밀도 연산을 제공하는 대화식 처리입니다. bc 명령은 먼저 File 매개변수로 지정된 입력 파일을 읽은 다음 표준 입력을 읽습니다. 입력 파일은 bc 명령을 읽고 실행하는 일련의 명령, 문 또는 함수 정의를 포함하는 텍스트 파일입니다.
bc 명령은 dc 명령에 대한 프리프로세서입니다. -c(컴파일 전용) 플래그를 지정하지 않을 경우, 이 명령은 dc 명령을 자동으로 호출합니다. -c 플래그를 지정하면, bc 명령의 실행으로 발생한 출력이 표준 출력으로 이동합니다.
bc 명령은 조작을 위한 입출력 기준을 십진수, 8진수 또는 16진수로 지정하게 합니다. 디폴트는 십진수입니다. 또한 이 명령은 십진수 점 표기를 위한 스케일링 조항를 갖습니다. bc 명령은 .을 사용하여 현재 로케일의 일부로서 지정된 십진수 점 문자에 관계없이 기점을 표시합니다.
bc 명령에 대한 구문은 C 언어의 구문과 유사합니다. bc 명령을 사용하면 입력 기준에 ibase 키워드를 지정하고 출력 기준에 obase 키워드를 지정함으로써 기준 간에 변환할 수 있습니다. 범위 2-16은 ibase 키워드에 유효한 값입니다. obase 키워드의 범위 영역은 2에서 /usr/include/sys/limits.h 파일에 정의된 BC_BASE_MAX 값으로 설정된 한계까지 입니다. ibase 및 obase 설정에 상관없이 bc 명령은 문자 A-F를 16진수 값 10-15로 인식합니다.
bc 명령의 출력은 프로그램 읽기에 의해 제어됩니다. 출력은 지정하지 않고 실행된 모든 표현식의 값이 들어 있는 하나 이상의 행으로 구성됩니다. 출력의 기수 및 정밀도는 obase 및 scale 키워드의 값에 의하여 제어됩니다.
bc 명령이 소스 파일로부터 정보를 처리하는 방법에 대한 자세한 정보는 다음 섹션에서 설명됩니다.
구문법
어휘 규약
식별자와 연산자
표현식
명령문
함수 호출
-I math 라이브러리 함수
구문법
다음의 구문법은 bc 프로그램에 대한 구문을 설명하며, 여기서 program은 유효한 프로그램을 의미합니다.
%token EOF NEWLINE STRING LETTER NUMBER
%token MUL_OP
/* '*', '/', '%' */
%token ASSIGN_OP
/* '=', '+=', '-=', '*=', '/=', '%=', '^=' */
%token REL_OP
/* '==', '<=', '>=', '!=', '<', '>' */
%token INCR_DECR
/* '++', '--' */
%token Define Break Quit Length
/* 'define', 'break', 'quit', 'length' */
%token Return For If While Sqrt
/* 'return', 'for', 'if', 'while', 'sqrt' */
%token Scale Ibase Obase Auto
/* 'scale', 'ibase', 'obase', 'auto' */
%start program
%%
program : EOF
| input_item program
;
input_item : semicolon_list NEWLINE
| function
;
semicolon_list : /* empty */
| statement
| semicolon_list ';' statement
| semicolon_list ';'
;
statement_list : /* empty */
| statement
| statement_list NEWLINE
| statement_list NEWLINE statement
| statement_list ';'
| statement_list ';' statement
;
statement : expression
| STRING
| Break
| Quit
| Return
| Return '(' return_expression ')'
| For '(' expression ';'
relational_expression ';'
expression ')' statement
| If '(' relational_expression ')' statement
| While '(' relational_expression ')' statement
| '{' statement_list '}'
;
function : Define LETTER '(' opt_parameter_list ')'
'{' NEWLINE opt_auto_define_list
statement_list '}'
;
opt_parameter_list:/* empty */
| parameter_list
;
parameter_list : LETTER
| define_list ',' LETTER
;
opt_auto_define_list
: /* empty */
| Auto define_list NEWLINE
| Auto define_list ';'
;
define_list : LETTER
| LETTER '[' ']'
| define_list ',' LETTER
| define_list ',' LETTER '[' ']'
;
opt_argument_list : /* empty */
| argument_list
;
argument_list : expression
| argument_list ',' expression
;
relational_expression
: expression
| expression REL_OP expression
;
return_expression : /* empty */
| expression
;
expression : named_expression
| NUMBER
| '(' expression ')'
| LETTER '(' opt_argument_list ')'
| '-' expression
| expression '+' expression
| expression '-' expression
| expression MUL_OP expression
| expression '^' expression
| INCR_DECR named_expression
| named_expression INCR_DECR
| named_expression ASSIGN_OP expression
| Length '(' expression ')'
| Sqrt '(' expression ')'
| Scale '(' expression ')'
;
named_expression : LETTER
| LETTER '[' expression ']'
| Scale
| Ibase
| Obase
;
어휘 규약
다음의 어휘 규약은 bc 명령에 적용됩니다.
bc 명령은 가능한 가장 긴 어휘 토큰 또는 주어진 지점에서 시작하는 분리문자를 인식합니다.
주석은 /*(슬래쉬, 별표)로 시작하여 */(별표, 슬래쉬)로 종료합니다. 주석은 어휘 토큰을 분리하는 것에만 영향을 줍니다.
개행 문자는 NEWLINE 토큰으로 인식됩니다.
STRING 토큰은 문자열 상수를 나타냅니다. 문자열은 "(큰 따옴표)로 시작하여 "(큰 따옴표)로 종료합니다. 따옴표 사이의 모든 문자는 글자대로 받아들여 집니다. "(큰따옴표)를 포함하는 문자열을 지정하는 방법은 없습니다. 각 문자열의 길이는 BC_STRING_MAX 값에 설정된 최대 바이트로 제한되며, limits.h 파일에 정의됩니다.
공백 문자는 STRING 토큰에 나타나거나 어휘 토큰을 분리하는 데 사용되는 경우를 제외하고는 영향을 미치지 않습니다.
\n (백슬래쉬, 개행) 문자:
어휘 토큰을 분리합니다.
는 STRING 토큰에서 문자 시퀀스로 해석됩니다.
다중 회선 NUMBER 토큰의 일부인 경우에는 무시됩니다.
NUMBER 토큰은 다음 문법을 사용합니다.
NUMBER : integer
| '.' integer
| integer '.'
|integer '.' integer
;
integer : digit
| integer digit
;
digit : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
| 8 | 9 | A | B | C | D | E | F
;
NUMBER 토큰 값은 ibase 내부 레지스터 값에 의하여 지정된 기준의 숫자로서 해석됩니다.
NUMBER 토큰의 값은 ibase 내부 레지스터의 값으로 지정된 기준에서 숫자로 해석됩니다. 각 숫자는 여기에 나열된 순서로 0-15의 값을 가지며, 마침표 문자는 기점을 나타냅니다. ibase 레지스터의 값보다 크거나 같은 숫자가 토큰에 표시되는 경우 활동이 정의되지 않습니다. ibase 및 obase 레지스터 자체에 지정되는 하나의 숫자 값에 대한 예외가 있습니다.
다음 키워드는 토큰으로 인식됩니다.
auto for length return sqrt
break ibase obase scale while
define if quit
한 키워드 이내를 제외하고, 다음의 문자는 하나의 LETTER 토큰으로 간주됩니다.
a b c d e f g h i j k l m n o p q r s t u v w x y z
다음의 단일 문자 및 두 개의 문자 계층은 ASSIGN_OP 토큰으로 인식됩니다.
=(등호)
+=(더하기 부호, 등호)
-=(빼기 부호, 등호)
*= (별표, 등호)
/= (슬래쉬, 등호)
%=(퍼센트, 등호)
^= (캐럿, 등호)
다음의 단일 문자는 MUL_OP 토큰으로 인식됩니다.
*(별표)
/(슬래쉬)
%(퍼센트)
다음 단일 문자 및 두 개의 문자 계층은 REL_OP 토큰으로 인식됩니다.
==(이중 등호)
<=(부등호(보다 작다), 등호)
>=(부등호, 등호)
!=(느낌표, 등호)
<(부등호(보다 작다))
>(부등호)
다음 두 개의 문자로 구성된 문자열은 INCR_DECR 토큰으로 인식됩니다.
++(이중 더하기 부호)
-- (이중 하이픈)
다음의 단일 문자는 토큰으로 인식됩니다. 토큰은 다음과 같이 문자와 같은 이름을 갖습니다.
<개행>
((왼쪽 소괄호)
)(오른쪽 소괄호)
,(쉼표)
+(더하기 부호)
-(빼기 부호)
;(세미콜론)
[(왼쪽 대괄호)
](오른쪽 대괄호)
^(캐럿)
{(왼쪽 중괄호)
}(오른쪽 중괄호)
EOF 토큰은 입력 끝에 도달할 때 리턴됩니다.
식별자와 연산자
bc 명령으로 인지되는 일반 식별자, 배열 식별자 및 기능 식별자의 세 종류의 식별자가 있습니다. 세 가지의 모든 유형은 하나의 소문자로 구성됩니다. 배열 식별자 다음에는 [ ](왼쪽 및 오른쪽 대괄호)가 옵니다. 배열 첨자는 인수나 자동 리스트에 있을 때를 제외하고는 필수입니다. 배열의 차원은 단독으로 정해지며 BC_DIM_MAX 값으로 지정된 크기까지 포함할 수 있습니다. 색인은 0부터 지정됩니다. 따라서, 배열의 색인은 0부터 BC_DIM_MAX -1로 정의된 값까지 지정할 수 있습니다. 첨자는 정수로 절단됩니다. 기능 식별자 다음에는 ( )(왼쪽 및 오른쪽 괄호)가 와야 하며 포함 인수가 뒤에 올 수도 있습니다. 세 가지 유형의 식별자는 상충하지 않습니다.
bc 프로그램 표의 연산자는 모든 연산자의 선행 및 결합순서에 대한 규칙을 요약합니다. 같은 행의 연산자는 동일한 선행을 갖습니다. 행은 선행이 작아지는 순서입니다.

bc 프로그램 연산자
연산자 | 결합 순서
++, - - | 적용 불가능
16진 - | 적용 불가능
^ | 오른쪽에서 왼쪽으로
*, /, % | 왼쪽에서 오른쪽으로
+, 2진 - | 왼쪽에서 오른쪽으로
=, +=, -=, *=, /=, ^= | 오른쪽에서 왼쪽으로
==, <=, >=, !=, <, > | 없음

각 표현식이나 이름이 지정된 표현식에는 scale이 포함됩니다. 이는 표현식의 소수 부분으로 유지되는 십진수 숫자입니다.
Named expressions은 값이 기억된 곳에 위치합니다. 명명된 표현식은 지정(assignment)의 왼쪽에 유효합니다. 명명된 표현식의 값은 명명된 위치에 저장된 값입니다. 단순 식별자 및 배열 요소는 명명된 표현식이며, 0의 초기 값과 0의 초기 스케일을 갖습니다.
내부 레지스터 scale, ibase 및 obase 모두 이름이 지정된 표현식입니다. 이러한 레지스터 중 하나의 이름을 이루는 식의 스케일은 0입니다. 이러한 레지스터로 지정된 값은 정수로 절단됩니다. scale 레지스터는 (아래 설명한 것과 같이) 식의 스케일을 계산하는 데 사용된 전역 값을 포함하고 있습니다. scale 레지스터의 값은 0 <= scale <= {BC_SCALE_MAX}으로 제한되고, 디폴트 값 0을 갖습니다. ibase 및 obase 레지스터는 각각 입력과 출력 번호의 기수입니다. ibase의 값은 <= ibase <= 16으로 제한됩니다. obase의 값은 2 <= obase = {BC_BASE_MAX}로 제한됩니다.
ibase 또는 obase 레지스터에 "어휘 규약"에서 설명된 리스트의 한 자리 값이 지정되면, 값이 16진수로 간주됩니다. 예를 들면 다음과 같습니다.
ibase=A
현재의 ibase 레지스터 값에 상관없이 기준 10으로 설정합니다. 그렇지 않을 경우, ibase 레지스터의 값 이상의 숫자가 입력에 나타날 경우, 작용은 정의되지 않습니다. ibase 및 obase 레지스터는 초기값 10을 갖습니다.
내부 계산은 입출력 기준에 관계없이, 십진수 처럼 지정된 소수 자릿수로 처리됩니다. 정확한 결과가 아카이브될 경우, 예를 들면, 다음과 같습니다.
scale=0; 3.2/1
bc 명령은 결과를 절단합니다.
다음 규칙에 따라 obase 레지스터의 모든 숫자 값은 출력입니다.
값이 0 미만이면, 출력은 - (하이픈)입니다.
숫자 값에 따라, 출력은 다음 중의 하나입니다.
숫자 값의 절대 값이 1 이상일 경우, 출력은 (3단계에서 설명된) obase 레지스터에 해당하는 일련의 숫자로서 정수 부분의 값입니다. 다음 출력은 0이 아닌 최상위 숫자이며, 다음에는 연속적으로 적은 숫자가 옵니다.
수치 값의 절대 값이 1보다 적으나 0보다 크며 수치 값의 스케일이 0보다 클 경우, 문자 0이 출력되는지의 여부는 지정하지 않습니다.
수치 값이 0일 경우, 출력 문자는 0입니다.
값의 스케일이 0보다 크면, 출력은 .(마침표) 다음에 다음의 obase 레지스터 값에 적절한 여러 숫자가 나옵니다. 숫자는 값 소수부의 최상위 부분을 나타내며, s는 출력되는 값의 스케일을 나타냅니다.
obase 값이 10이면, 숫자의 s 번호를 출력합니다.
obase 값이 1보다 크면 s보다 작거나 같은 번호를 출력합니다.
obase 값이 10보다 작으면 s보다 크거나 같은 번호를 출력합니다.
10이 아닌 obase 값의 경우, 이것은 10s의 정밀도를 나타내는 숫자이어야 합니다.
obase 값이 2-16인 경우, 유효한 숫자는 단일 문자의 첫번째 obase입니다.
0 1 2 3 4 5 6 7 8 9 A B C D E F
이것은 각각 0-15까지의 값을 나타냅니다.
기준이 16보다 큰 경우, 각 숫자는 여러 자리로 된 십진수로 개별적으로 기록됩니다. 최상위 소수 자리를 제외한 각 자리 다음에는 단일 공백 문자가 옵니다. 기준 17-100 사이의 경우, bc 명령은 두 자리 십진수를 기록하며, 기준 101-1000 사이의 경우, bc 명령은 세 자리 십진수를 기록합니다. 예를 들면, 기준 25의 십진수 1024는 다음과 같이 기록됩니다.
01 15 24
기준 125에서는, 다음과 같이 기록됩니다.
008 024
매우 큰 수는 POSIX 로케일에서 행 당 70문자로, 행을 가로질러 분할될 수 있습니다. 다른 로케일은 다른 문자 경계에서 분할할 수 있습니다. 계속되는 행은 \(백슬래쉬)로 종료하여야 합니다.
표현식
숫자 상수는 표현식입니다. 스케일은 상수를 나타내는 입력의 기점 다음에 오는 자릿수 또는 기점이 나타나지 않을 경우 0입니다.
시퀀스(expression)는 expression과 같은 값과 스케일을 갖는 표현식입니다. 소괄호는 정규 선행을 변경하는 데 사용될 수 있습니다.
단항 및 2진 연산자는 다음과 같은 의미를 갖습니다.
-expression 결과는 표현식의 부정입니다. 결과의 스케일은 표현식의 스케일입니다.
단항 증분 및 감소분 연산자는 조작하는 명명된 표현식의 스케일을 수정하지 않습니다. 결과의 스케일은 명명된 표현식의 스케일입니다.
++named_expression 명명된 표현식은 1씩 증분됩니다. 결과는 증분된 후 명명된 표현식의 값입니다.
- -named_expression 명명된 표현식은 1씩 감소됩니다. 결과는 감소된 후 명명된 표현식의 값입니다.
named_expression++ 명명된 표현식은 1씩 증분됩니다. 결과는 증분되기 전에 명명된 표현식의 값입니다.
named_expression- - 명명된 표현식은 1씩 감소됩니다. 결과는 감소되기 전에 명명된 표현식의 값입니다.
지수표기 연산자, ^(캐럿)는 오른쪽에서 왼쪽으로 바인드합니다.
expression ^expression 결과는 두번째 표현식에 제곱을 한 첫번째 표현식입니다. 두 번째 표현식이 정수가 아닐 경우, 작용은 정의되지 않습니다. a가 왼쪽 표현식의 스케일이고 b가 오른쪽 표현식의 절대 값이면 결과의 스케일은 다음과 같습니다.
if b >= 0 min(a * b, max(scale, a))
if b < 0 scale
배수사 연산자 * (별표), /(슬래쉬) 및 %(퍼센트)는 왼쪽에서 오른쪽으로 바인드합니다.
expression * expression 결과는 두 가지 표현식의 곱입니다. a 및 b가 두 표현식의 스케일일 경우, 결과 스케일은 다음과 같습니다.
min(a+b,max(scale,a,b))
expression / expression 결과는 두 가지 표현식의 몫입니다. 결과의 스케일은 scale의 값입니다.
expression % expression 표현식 a 및 b에서 a % b는 다음 단계와 동등한 것으로 평가됩니다.
현재 스케일로 a/b를 계산하십시오.
다음과 같이 결과를 사용하여 계산하십시오.
a - (a / b) * b
다음과 같이 스케일하십시오.
max(scale + scale(b), scale(a))
결과의 스케일은 다음과 같습니다.
max(scale + scale(b), scale(a))
scale이 0이면, % 연산자는 수학적으로 나머지 연산자입니다.
덧셈 연산자 +(더하기 부호) 및 -(빼기 부호)는 왼쪽에서 오른쪽으로 바인드합니다.
expression + expression 결과는 두 가지 표현식의 합계입니다. 결과의 스케일은 표현식의 최대 스케일입니다.
expression - expression 결과는 두 가지 표현식의 차입니다. 결과의 스케일은 표현식의 최대 스케일입니다.
다음의 지정(assignment) 연산자는 오른쪽에서 왼쪽으로 바인드합니다.
=(등호)
+=(더하기 부호, 등호)
-=(빼기 부호, 등호)
*=(별표, 등호)
/=(슬래쉬, 등호)
%=(퍼센트, 등호)
^=(캐럿, 등호)
named-expression = expression 이 표현식은 오른쪽 표현식의 값에서 왼쪽의 명명된 표현식으로 지정됩니다. 명명된 표현식 양쪽 모두의 스케일 및 결과는 표현식의 스케일입니다.
복합 지정(assignment) 양식은 다음과 같습니다.
named-expression = expression
는 다음과 같습니다.
named-expression = named-expression expression
는 명명된 표현식이 한번만 평가되는 것을 제외합니다.
다른 모든 연산자와 달리, 다음 관계 연산자는 if 또는 while문의 오브젝트로 또는 for문 내에서만 유효합니다.
<(부등호(보다 작다))
>(부등호)
<=(부등호(보다 작다), 등호)
>=(부등호, 등호)
==(이중 등호)
!=(느낌표, 등호)
expression1 < expression2 Expression1이 Expression2의 값보다 엄밀히 적을 경우 관계는 참입니다.
expression1 > expression2 expression1의 값이 expression2의 값보다 분명히 클 경우, 관계는 참이 됩니다.
expression1 <= expression2 Expression1이 Expression2의 값 이하일 경우 관계는 참입니다.
expression1 >= expression2 expression1의 값이 expression2의 값보다 크거나 같을 경우, 관계는 참이 됩니다.
expression1 == expression2 expression1의 값과 expression2의 값이 같을 경우, 관계는 참이 됩니다.
expression1 != expression2 expression1의 값과 expression2의 값이 같지 않을 경우, 관계는 참이 됩니다.
명령문
문이 표현식일 경우, 주 연산자가 지정되지 않으면, 문의 실행은 표현식의 값 다음에 개행 문자를 기록합니다.
문이 문자열일 경우, 문의 실행은 문자열의 값을 기록합니다.
세미콜론 또는 개행 문자로 구분된 문은 순차적으로 실행됩니다. bc 명령의 대화식 호출에서, 매번 문법 결과에 만족되는 개행 문자를 읽습니다.
input_item : semicolon_list NEWLINE
semicolon_list를 구성하는 문의 순차 리스트가 즉시 실행되며, 해당 실행에 의하여 작성된 출력이 버퍼에 지연되지 않고 기록됩니다.
관계가 참이면 if 문(if (relation) 문), the 문이 실행됩니다.
while 문(while (relation) statement)은 relation이 테스트되는 루프를 구현합니다. relation이 참이 될 때마다 statement를 실행하고 relation을 다시 테스트합니다. relation이 거짓일 때, 실행은 statement 이후를 재개합니다.
for 문(for (expression; relation; expression) statement)은 다음과 같습니다.
first-expression
while (relation) {
statement
last-expression
}
모든 세 가지 표현식이 존재해야 합니다.
break문은 for 또는 while문에 대하여 종료하게 합니다.
auto 문(auto identifier [,identifier ] ...)은 식별자 값이 후입선출되게 합니다. 식별자는 일반 식별자나 배열 식별자일 수 있습니다. 배열 식별자는 배열 이름과 빈 정방(square) 대괄호로 지정됩니다. auto문은 함수 정의에서의 최초 명령문입니다.
define문은 다음과 같습니다.
define LETTER ( opt_parameter_list ) {
opt_auto_define_list
statement_list
}
LETTER 이름의 함수를 정의합니다. LETTER 기능이 이전에 정의되었을 경우, define문은 이전 정의를 대체합니다. 표현식은 다음과 같습니다.
LETTER ( opt_argument_list )
LETTER 기능을 호출합니다. 호출시의 인수가 정의시의 매개변수와 일치하지 않을 경우, 작용이 정의되지 않습니다. 호출되기 전에 기능이 정의됩니다. 기능이 본문 내에서 정의된 것으로 간주되면, 순환 호출이 유효합니다. 함수가 호출될 경우, 함수 내의 숫자 상수의 값은 ibase 레지스터의 값에 의하여 지정된 기준으로 해석됩니다.
return문(return 및 return(expression))은 함수가 종료되어 auto 변수가 나타나도록 하며, 함수의 결과를 지정합니다. 최초 형식은 return(0)과 같습니다. 기능 호출의 값과 스케일은 소괄호 표현식의 값과 스케일입니다.
quit 문(quit)은 입력에서 이 명령문이 있는 위치에서 bc 프로그램의 실행을 중지합니다. 이 명령문이 함수 정의 또는 if, for, while 문에 있을 경우에도 중지합니다.
함수 호출
함수 호출은 함수 이름 다음에 오는 표현식의 쉼표로 구분된 리스트를 포함하는 소괄호로 이루어지며, 표현식은 함수 인수입니다. 인수로서 패스된 전체 배열은 배열 이름 다음에 오는 [ ](왼쪽 및 오른쪽 대괄호)에 의하여 지정됩니다. 모든 함수 인수는 값에 의하여 패스됩니다. 따라서, 형식 매개변수에 대한 변경사항은 실제 인수에 영향을 미치지 않습니다. 함수가 return 문을 실행하여 종료되면, 함수의 값은 return 문의 괄호로 묶은 표현식의 값이 되고, 표현식이 제공되지 않거나 return 문이 없으면 0이 됩니다.
sqrt(expression)의 결과는 표현식의 제곱근입니다. 결과는 최하위 십진수 위치에서 절단됩니다. 결과의 스케일은 표현식의 스케일이거나 scale의 값 중 더 큰 것입니다.
length(expression)의 결과는 표현식에서 유효한 십진수 자리의 전체 수입니다. 결과의 스케일은 0입니다.
scale(expression)의 결과는 표현식의 스케일입니다. 결과의 스케일은 0입니다.
bc 프로그램에는 global과 automatic(국지)이라는 두 개의 저장소 클래스만 있습니다. 기능에 국지적인 식별자만이 auto 키워드로 선언될 필요가 있습니다. 기능에 대한 인수는 기능에 국지적입니다. 다른 모든 식별자는 전역으로 가정되며 모든 기능에 사용 가능합니다. 전역 및 국지의 모든 식별자는 초기값 0을 갖습니다. auto로 선언되는 식별자는 기능에 대한 항목에 할당되며 기능에서 리턴될 때 해제됩니다. 그러므로 함수 호출간에 값을 보유하지 않습니다. auto 배열은 배열 이름 다음에 오는 [ ](왼쪽 및 오른쪽 대괄호)에 의하여 지정됩니다. 함수 입력시, 매개변수 및 자동 변수로서 표시되는 이름의 기존 값을 스택으로 넣습니다. 함수가 리턴할 때까지, 이 이름들에 대한 참조는 새로운 값만을 참조합니다.
이 기능으로 호출된 다른 함수의 이러한 이름에 대한 참조는 해당 함수 중 하나가 국지 변수에 대하여 같은 이름을 사용할 때까지 새로운 값을 참조합니다.
-l Math 라이브러리 함수
다음 함수는 -l 플래그를 지정할 때 사용됩니다.
s(expression) expressionx의 사인을 지정합니다. 여기서 expression은 라디안입니다.
c(expression) expressionx의 코사인을 지정합니다. 여기서 expression은 라디안입니다.
a(expression) expressionx,의 아크 탄젠트를 지정합니다. 여기서 expression은 라디안입니다.
l(expression) expression의 자연 대수를 지정합니다.
e(expression) expression의 지수를 지정합니다.
j(expression,expression)
정수 순서의 Bessel 함수를 지정합니다.
이러한 각 함수의 호출 스케일은 함수가 호출될 때 scale 키워드의 값입니다. 이러한 기능이 수학적 함수의 도메인 외부의 인수와 함께 호출될 경우 작용이 정의되지 않습니다.
플래그
-c File 매개변수를 컴파일하지만, dc 명령을 호출하지는 않습니다.
-l 소문자 L math 함수의 라이브러리를 정의하고 scale 변수를 20으로 설정합니다.
종료 상태
이 명령은 다음과 같은 종료값으로 복귀합니다.
0 정상적으로 완료되었습니다.
1 구문 오류가 발생했거나 입력 파일에 액세스할 수 없습니다.
지정되지 않음 다른 오류가 발생하였습니다.
예제
bc 명령을 계산기로서 사용할 수 있습니다. scale 변수 설정 여부와 어떤 값을 설정하느냐에 따라, 시스템은 소수 총액을 표시합니다. 다음과 같이 입력하십시오.
bc
1/4
0만 표시합니다. scale 변수를 설정하고 주석을 추가하려면, 다음과 같이 입력하십시오.
scale = 1 /* Keep 1 decimal place */
1/4
화면에 0.2가 표시됩니다. 다음과 같이 입력하십시오.
scale = 3 /* Keep 3 decimal places */
1/4
0.250을 표시합니다. 다음과 같이 입력하십시오.
16+63/5
28.600을 표시합니다. 다음과 같이 입력하십시오.
(16+63)/5
15.800을 표시합니다. 다음과 같이 입력하십시오.
71/6
11.833을 표시합니다.
bc 명령은 지정(assignment)을 제외하고, Enter 키를 누를 경우 각 표현식의 값을 표시합니다.
bc 명령 표현식을 키보드에서 직접 입력할 경우, bc 명령 세션 끝으로 가서 쉘 명령행으로 리턴하려면, EOF(Ctrl-D) 키 조합을 누르십시오.
C와 같은 프로그램을 기록하거나 수행하려면, 다음과 같은 명령을 입력하십시오.
bc -l prog.bc
e(2) /* e squared */
ma
화면에 7.38905609893065022723이 표시됩니다. 다음과 같이 입력할 경우,
f(5) /* 5 factorial */
화면에 120이 표시됩니다. 다음과 같이 입력할 경우,
f(10) /* 10 factorial */
화면에 3628800이 표시됩니다.
이 시퀀스는 prog.bc 파일에 저장된 bc 프로그램을 해석하고, 키보드로부터 더 많은 bc 명령을 읽습니다. -l 플래그와 함께 bc 명령을 시작하면 math 라이브러리를 사용할 수 있습니다. 이 예제는 math 라이브러리에서 e(지수) 함수를 사용하고 f는 prog.bc 프로그램 파일에서 다음과 같이 정의됩니다.
/* compute the factorial of n */
define f(n) {
auto i, r;
r = 1;
for (i=2; i<=n; i++) r =* i;
return (r);
}
for 또는 while 문 다음에 오는 명령문은 같은 행에서 시작되어야 합니다. bc 명령 표현식을 키보드에서 직접 입력할 경우, bc 명령 세션 끝으로 가서 쉘 명령행으로 리턴하려면, EOF(Ctrl-D) 키 조합을 누르십시오.
2항식을 역 폴리시 표기법(RPN)으로 변환하려면, 다음과 같이 입력하십시오.
bc -c
(a * b) % (3 + 4 * c)
화면에 다음 사항이 표시됩니다.
lalb* 3 4lc*+%ps.
이 시퀀스는 bc 명령의 infix-notation 표현식을 dc 명령이 해석할 수 있는 표현식으로 컴파일합니다. dc 명령은 확장된 RPN(실제 페이지 번호) 표현식을 평가합니다. 컴파일된 출력에서 각 변수 이름 앞의 l는 변수 값을 스택으로 로드하는 dc 부속 명령입니다. p는 스택의 상단에서 값을 표시하며, s.는 상단 값을 레지스터 .. dc 명령에 대한 파일에서 RPN 표현식을 저장하여 이 명령의 표준 출력을 재지정하여 나중에 평가할 수 있습니다. bc 명령 표현식을 키보드에서 직접 입력할 경우, bc 명령 세션 끝으로 가서 쉘 명령행으로 리턴하려면, EOF(Ctrl-D) 키 조합을 누르십시오.
pi의 최초 10자리의 근사값을 변수 x로 쉘에 지정하려면, 다음과 같이 입력하십시오.
x=$(printf "%s\n" 'scale = 10; 104348/33215' | bc)
다음 bc 프로그램은 레이블에 따라 표준 출력으로 pi와 같은 근사값을 인쇄합니다.
scale = 10
"pi equals "
104348 / 33215
(-l(소문자 L)옵션이 지정될 경우, 함수가 사전 정의되는 것과 같이) 함수를 정의하여 지수 함수의 근사값을 계산하려면, 다음과 같이 입력하십시오.
scale = 20
define e(x){
auto a, b, c, i, s
a = 1
b = 1
s = 1
for (i = 1; 1 == 1; i++){
a = a*x
b = b*i
c = a/b
if (c == 0) {
return(s)
}
s = s+c
}
}
최초 10 정수의 지수 함수 근사값을 인쇄하려면, 다음과 같이 입력하십시오.
for (i = 1; i <= 10; ++i) {
e(i)
}
파일
/usr/bin/bc bc 명령을 포함하고 있습니다.
/usr/lib/lib.b 수학적 라이브러리를 포함하고 있습니다.
/usr/bin/dc 데스크 계산기를 포함하고 있습니다.
관련 정보
awk 명령, dc 명령.