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

m4
m4 m4 명령 목적 매크로 정의를 확장해서 파일을 사전처리합니다. 구문
m4 [ -e] [ -l ] [ -s ] [ -B Number ] [ -D Name [ =Value ] ] ... [ -H Number ] [ -I Directory ] [ -S Number ] [ -T Number ] [ -U Name ] ... [ File ... ]
설명
m4 명령은 C 및 기타 언어의 프리프로세서로 사용되는 매크로 처리 프로그램입니다. 이를 사용하여 내장 매크로나 사용자 정의 매크로를 처리할 수 있습니다.
각 File 매개변수는 순서대로 처리됩니다. File 매개변수를 지정하지 않거나 -(대쉬)를 파일 이름으로 지정하는 경우, m4 명령은 표준 입력을 읽습니다. 또한 처리된 매크로를 표준 출력으로 기록합니다. 매크로 호출이 다음의 양식을 따릅니다.
macroname(argument . . . )
왼쪽 괄호가 macroname 바로 다음에 이어져야 합니다. 왼쪽 괄호가 정의된 매크로 이름 다음에 이어지지 않는 경우, m4 명령은 이것을 인수 없는 매크로 호출로 읽습니다. 매크로 이름은 ASCII 영문자, 숫자, _(밑줄) 문자 등으로 구성됩니다. 확장 문자는 매크로 이름에 사용할 수 없습니다. 처음 문자가 숫자여서는 안됩니다.
인수를 모으는 동안, m4 명령은 인용부호 표시가 없는 선행 공백, 탭, 개행 문자 등은 무시합니다. 문자열의 인용부호 표시는 작은 따옴표를 사용하십시오. 인용부호 표시가 된 문자열의 값은 인용부호를 제외한 문자열입니다.
m4 명령이 매크로를 인식하면, 일치되는 오른쪽 괄호를 찾아서 인수를 수집합니다. 매크로 정의에 표시되는 것보다 적게 인수를 제공할 경우, m4 명령은 정의의 후미 인수들이 널(null)인 것으로 간주합니다. 매크로 평가는 보통 인수 수집 동안에 진행됩니다. 내포된 호출 내의 모든 쉼표와 오른쪽 괄호는 문자 상수로 변환되므로, 에스케이프 문자나 물음표가 필요하지 않습니다. 인수를 수집하고 나면, m4 명령은 매크로 값을 다시 입력 스트림에 두어서 다시 스캔합니다.
내장 매크로
m4 명령은 다음과 같은 내장 매크로를 사용가능하게 합니다. 내장 매크로를 다시 정의할 수도 있지만, 그렇게 하면, 원래의 의미를 잃어버리게 됩니다. 달리 명시하지 않는 한, 매크로 값은 널(null)입니다.
define(Name,NewName) 매크로 Name을 NewName 값으로 대체합니다. NewName 문자열은 $n. . . (이 경우, n은 숫자임)에서 취할 수 있습니다. 이러한 경우, 대체 텍스트의 n은 모두 Name의 n번째 인수로 대체됩니다. $0은 매크로 이름입니다. 널(null) 문자열은 빠진 인수를 대체합니다. 인수의 개수는 $#를 대체합니다. 쉼표로 분리된 모든 인수 리스트는 $*를 대체합니다. $@는 $*처럼 작동하지만, 각 인수는 현재의 인용문자로 표시됩니다(changequote 참조).
undefine(Name) Name의 정의를 제거합니다.
defn(Name . . . ) Name의 인용 부호로 표시된 정의를 리턴합니다.
pushdef(Name,NewName) Name을 define에 있는 것처럼 NewName으로 재정의하지만, 모든 이전 정의를 저장합니다.
popdef(Name . . . ) Name의 현재 정의를 제거하고 이전 정의로 리턴합니다(이전 정의가 있는 경우).
ifdef(Name,True,[False]) Name이 0이 아닌 다른 값으로 정의된 경우에만 True 값을 리턴하고, 그 밖의 경우 False를 리턴합니다. False를 제공하지 않은 경우 그 값은 널(null)입니다.
shift(Argument . . . ) 처음 인수를 제외한 모든 인수를 리턴합니다. 다른 인수는 모두 인용부호 표시가 되며, 사이에 쉼표가 표시된 상태로 되돌려집니다. 인용부호 표시는 연속해서 수행되는 여분의 스캔 효과를 없앱니다.
changequote(L,R) 인용부호를 L 및 R로 변경합니다. 부호의 길이는 최대 5 바이트입니다. 인수 없는 changequote는 원래 값(' ')을 복원합니다.
changecom(L,R) 왼쪽 및 오른쪽 주석 표시기를 디폴트 # 및 개행 문자에서 L 및 R로 변경합니다. 인수 없이는 주석 메카니즘을 사용할 수 없습니다. 인수가 하나인 경우에는 왼쪽 표시기가 매개변수가 되고, 오른쪽 표시기는 개행 문자가 됩니다. 인수가 두 개인 경우에는 양쪽 표시기가 모두 영향을 받습니다. 인용문 표시기의 길이는 최대 5 바이트까지 가능합니다.
divert(Number) 현재 출력 스트림을 스트림 Number으로 변경합니다. 0에서 9번까지 10개의 출력 스트림이 있습니다. 최종 출력은 스트림을 숫자 순서에 따라 병합한 것입니다. 처음에는 스트림 0이 현재의 스트림입니다. m4 명령은 0-9 이외의 스트림으로 전환된 출력을 버립니다.
undivert(Number . . . ) 지정 각주달기에서(인수가 없는 경우에는 모든 각주달기) 텍스트가 즉시 출력되게 합니다. 텍스트가 다른 각주달기로 각주달기 해제될 수도 있습니다. 각주달기 해제는 각주달기된 텍스트를 버립니다.
divnum 현재의 출력 스트림 값을 리턴합니다.
dnl 다음 개행 문자까지 문자를 읽고 버립니다.
ifelse([String1,String2,True,[False]] . . . ) String1 및 String2가 동일하면 값이 True입니다. 동일하지 않고 인수가 5개 이상인 경우, m4 명령은 추가 인수(4, 5, 6, 7 등)를 사용하여 프로세스를 반복합니다. 그렇지 않으면, 값이 False이거나, False에 지정된 값이 없는 경우 널(null)입니다.
incr(Number) 1만큼 증가된 인수 값을 리턴합니다.
decr(Number) 1만큼 감소된 인수 값을 리턴합니다.
eval(Expression[,Number1[,Number2]]) 최초의 인수를 32 비트 산술 연산을 사용하는 연산식으로 평가합니다. 사용할 수 있는 연산자는 +, -, *, /,%, ^(지수표기), bitwise &, |, ~, ^ 관계식, 괄호 등입니다. C 언어에서처럼 8진 및 16진 숫자를 지정할 수 있습니다. Number1은 표현식의 결과에 대한 승수를 지정합니다디폴트 제곱근은 10입니다. 선택적인 Number2는 결과에서 사용되는 최소의 숫자 개수를 지정합니다.
len(String) String의 바이트 수를 리턴합니다.
dlen(String) String에서 표시 가능한 문자의 수를 리턴합니다. 즉, 2 바이트 확장 문자는 한 개의 표시 가능 문자로 계산됩니다.
index(String1,String2) String1 문자열에서 String2 문자열이 시작하는(0 기점) 위치 또는 두 번째 매개변수가 없을 경우 -1을 리턴합니다.
substr(String,Position, [Number] ) String의 부속 문자열을 리턴합니다부속 문자열의 시작 부분은 Position으로 선택되며, Number는 부속 문자열의 길이를 나타냅니다. Number가 지정되어 있지 않은 경우에 부속 문자열은 최초 문자열의 끝까지 모든 것을 포함합니다.
translit(String,From,To) String의 문자를 From에서 제공된 세트에서 To에서 제공된 세트로 변환합니다. 약어는 허용되지 않습니다. 2 바이트의 확장 문자는 상응하는 대체 문자로 정확히 대응됩니다.
include(File) File의 내용을 리턴하거나 파일에 액세스할 수 없는 경우 오류 메세지를 표시합니다.
sinclude(File) File 내용을 리턴하지만, File에 액세스할 수 없는 경우에도 오류 메세지를 표시하지 않습니다.
syscmd(Command) Command를 수행합니다. 리턴되는 값이 없습니다.
sysval 리턴 코드를 마지막 호출에서 syscmd로 리턴합니다.
maketemp( . . . nnnn . . . ) 인수의 nnnn을 현재 프로세스 ID 번호로 대체합니다.
m4exit(Value) m4를 즉시 종료하고, 지정된 종료 Value(디폴트 0)를 리턴합니다.
m4wrap(LastMacro) EOF 문자를 읽은 다음 LastMacro를 수행합니다. 예를 들어, m4wrap(`cleanup ()')은 m4 종료시 cleanup 매크로를 수행합니다.
errprint(Message) 진단 출력 파일에 Message를 포함합니다.
dumpdef([Name . . . ]) 이름 지정된 항목이나 인수가 제공되지 않은 경우, 모든 항목에 대한 현재의 이름과 정의를 표준 출력으로 기록합니다.
traceon(Macro) Macro에 대한 추적을 설정합니다. 명명된 것이 없는 경우, 모든 매크로에 대한 추적이 켜집니다.
traceoff(Macro . . . ) 추적을 전체 및 지정된 Macro에 대하여 해제합니다. traceon에 의해 특별히 추적되는 매크로는 traceoff에 대한 특정 호출에 의해서만 추적을 해제할 수 있습니다.
플래그
-B Number Number 변수를 푸시백 및 매개변수 수집 버퍼의 크기(디폴트 4096)로 만듭니다.
-e 대화식으로 작동합니다. 인터럽트는 무시되고 출력은 버퍼되지 않습니다.
-H Number Number 변수를 기호 테이블 해쉬 배열의 크기(디폴트 199)로 만듭니다. 크기는 소수여야 합니다.
-I Directory (대문자 i) Directory 변수를 먼저 탐색한 다음에, 표준 리스트의 디렉토리에서 이름이 /(슬래쉬)로 시작하지 않는 포함(내장 매크로) 파일을 탐색합니다.
-l (소문자 L) 어셈블러를 위한 행 번호 출력을 사용 가능하게 합니다(.xline. .).
-s C 프리프로세서를 위한 행 동기화 출력을 사용 가능하게 합니다(#line . .).
-S Number Number 변수를 호출 스택의 크기(디폴트 100 슬롯)로 만듭니다. 매크로는 3개의 슬롯을 가지고, 매크로가 아닌 인수는 하나의 슬롯을 가집니다.
-T Number Number 변수를 토큰 버퍼의 크기(디폴트 512 바이트)로 만듭니다.
선행 플래그는 파일 이름 앞, 그리고 -D 또는 -U 플래그 앞에 와야 합니다.
-DName[=Value] Name 변수를 Value 변수로 정의합니다. Value 변수가 지정되지 않은 경우, Name 변수는 널(null)이 됩니다.
-U Name -D 플래그를 사용하여 이전에 정의된 Name 변수의 정의를 해제합니다.
종료 상태
이 명령은 다음과 같은 종료 값을 리턴합니다.
0 성공적으로 완료되었습니다.
>0 오류가 발생했습니다.
m4exit 매크로가 사용되는 경우, 입력 파일은 종료 값을 지정할 수 있습니다.
예제
C 언어 프로그램을 m4 명령으로 사전처리하고 컴파일하려면, 다음을 입력하십시오.
m4 prog.m4 > prog.c
cc prog.c
파일
/usr/ccs/bin/m4 m4 명령이 들어 있습니다.