M4(1)

명칭
m4 - 매크로 랭귀지 프로세서

서식
m4 [-d flags] [-t name] [-gs] [-D name[=value]] [-U name] [-I dirname] [file ...]

해설
m4 유틸리티는, 다양한 언어 (예를 들어 C, ratfor, fortran, lex, yacc 등)의 프론트엔드로서 이용할 수 있는 매크로 프로세서입니다. m4 (은)는, 표준 입력으로부터 읽어들입니다. 또, 표준 출력의 프로세스 텍스트에 써냅니다.

매크로의 호출은 name(argument1[, argument2, ..., argumentN]) 의 형식을 취하고 있습니다.

매크로명으로 거기에 계속되는 열림 괄호 (‘(’) (와)과의 사이에는 스페이스가 있어서는 안됩니다. 만약 매크로명의 직후에 열려 괄호가 계속되지 않으면 인수 없음의 매크로 호출로서 처리됩니다.

매크로명으로서 선두는 알파벳 또는 언더 스코아가, 2 캐릭터눈 이후는 영숫자 또는 언더 스코아를 사용할 수 있습니다. 따라서 올바른 매크로명에 매치 하는 정규 표현은 “[a-zA-Z_][a-zA-Z0-9_]*” 됩니다.

매크로의 인수중에서, 선두의 쿼트되어 있지 않은 공백, 탭, 개행 캐릭터 (‘\n’) (은)는 무시됩니다. 캐릭터 라인을 쿼트 하기 위해서는, 왼쪽, 및 오른쪽 싱글 쿼트를 사용해 주세요 (예: ‘ this is a string with a leading space’) 편입 매크로 changequote (을)를 사용해 쿼트 캐릭터를 변경할 수가 있습니다.

대체로의 편입 매크로는, 인수가 없으면 의미를 만들어내지 않으므로, 열림 괄호가 후에 계속되지 않는 경우, 특별한 것으로 해 인식되지 않습니다.

옵션은 이하와 같습니다:

-s  cpp(1) 용으로, #line 지시문을 출력합니다.

-D name[=value]
    심볼 name 의 값을 value (무지정시는 NULL )라고 정의합니다.

-U name
    심볼 name (을)를 미정도리로 합니다.

-I dirname
    include 패스를 디렉토리 dirname 그리고 추가합니다.

-d flags
    트레이스 플래그를 세트 합니다. flags 인수는, 이하와 같습니다:

    a   매크로의 인수를 표시합니다.
    c   매크로의 전개를 복수행으로 표시합니다.
    e   매크로의 전개 결과를 표시합니다.
    f   파일명의 장소를 표시합니다.
    l   행수를 표시합니다.
    q   인수와 현재의 쿼트의 결과를 인용합니다.
    t   모든 매크로를 트레이스 합니다.
    x   매크로의 전개의 수입니다.
    V   모든 옵션 플래그를 온으로 합니다.

    디폴트에서는, 트레이스는 eq 에 세트 하고 있습니다.

-t macro
    macro (을)를 트레이싱 합니다.

-g  GNU-m4 호환 모드를 유효하게 합니다. 이 모드에서는 changequote 에 2 개의 하늘의 파라미터를 붙이는 것으로 쿼트의 사용을 그만둘 수 있습니다. translit (은)는, 단일의 캐릭터 범위 (예를 들면 a-z) (을)를 취급해, 정규 표현으로 emacs(1) (와)과 같이 동작합니다. 변환의 수는 무제한합니다.

문법
m4 유틸리티에는 이하에 나타내는 편입 매크로가 실장되고 있습니다. 이러한 매크로는 재정의 가능하고, 그 경우에는 원래의 정의는 없어집니다. 특히 기술이 없는 한 반환값은 NULL 입니다.

builtin
    지정한 편입 매크로를 호출합니다. 재정의되고 있는 경우는 무시합니다. 편입이 그러한 이름에 의해 불려 가 가능한 재정의를 무시합니다.

changecom
    코멘트의 개시 캐릭터 라인과 종료 캐릭터 라인을 변경합니다. 디폴트에서는, 파운드 기호 (‘#’) (와)과 개행 캐릭터입니다. 인수를 지정하지 않았던 경우는 코멘트 순차 순서가 리셋트 됩니다. GNU 모드의 m4 그럼, 코멘트는 오프입니다. 설정할 수 있는 캐릭터 라인의 길이는 최대로 5 캐릭터입니다.

changequote
    제 1, 제 2 인수를 쿼트신볼로서 정의합니다. 심볼은, 길이 5 캐릭터 이내로 해 주세요. 인수가 주어지지 않았던 경우에는 디폴트의 좌우 싱글 쿼트에 설정됩니다.

decr
    인수의 값을 1 만 감소시킵니다. 인수는 올바르게 수치를 표현하는 캐릭터 라인이 아니면 안됩니다.

define
    제 1 인수로 지정한 이름의 새로운 매크로를 정의합니다. 정의 내용은 제 2 인수로 줍니다. 정의중에서의 ‘$n’ ( n (은)는 0 에서 9 까지)는 각각 그 매크로에게 줄 수 있다 제 n 인수에 치환됩니다. ‘$0’ (은)는 매크로명 그 자체입니다. 지정되지 않았던 인수는 NULL 캐릭터 라인에 치환됩니다. 또 ‘$#’ (은)는 인수의 수를 나타내, ‘$*’ (은)는 콤마로 단락지어진 전인수가 됩니다. ‘$*’ 하 ‘$*’ (와)과 같습니다만, 한층 더 치환을 하지 않게 전부의 인수가 쿼트 됩니다.

defn
    각 인수로 지정된 매크로의 정의 내용을 쿼트 해 돌려줍니다. 이것은 매크로 정의의 명칭 변경 (편입 매크로여도)에 이용할 수 있습니다.

divert
    m4 에는 10 개의 출력 큐가 준비되어 있습니다 (0 에서 9 까지의 번호가 붙어 있습니다). 처리의 마지막으로, 모든 큐는 번호순서에 연결되어 최종적인 출력을 생성하게 되어 있습니다. 초기 상태에서는 출력 큐는 0 번으로 설정되어 있습니다. divert 매크로를 사용해 새로운 출력 큐를 선택할 수가 있습니다 ( divert 에 부정한 인수를 주면(자) 출력이 파기되어 버립니다).

divnum
    현재의 출력 큐의 번호를 돌려줍니다.

dnl 개행 캐릭터를 포함한 줄 끝까지의 입력 캐릭터를 파기합니다.

dumpdef
    인수로 지정한 항목에 관해서, 그 이름과 정의를 출력합니다. 인수가 주어지지 않았던 경우는 모든 매크로에 대해 출력합니다.

errprint
    제 1 인수를 표준 에러 출력 스트림에 출력합니다.

esyscmd
    그 최초의 인수를 쉘에 건네주어, 쉘의 표준 출력에 돌려줍니다. 쉘이 그 표준 입력 및 m4 의 표준 에러를 공유하는 것에 주의해 주세요.

eval
    제 1 인수를 계산식으로 간주해 32-bit 폭의 산술 연산을 이용해 계산합니다. 연산자로서는 표준의 C 로 이용되는 것, 즉 3 항, 산술, 논리, 쉬프트, 관계, 비트의 각 연산자, 및 괄호가 이용 가능합니다. 또 수치도 C 와 같게 8 진, 10 진, 16 진으로 기술할 수 있습니다. 제 2 인수로 (만약 있으면) 연산 결과의 기수를 지정할 수 있어 제 3 인수로 (만약 있으면) 연산 결과의 최소 자리수를 지정할 수 있습니다.

expr
    eval 의 별명입니다.

ifdef
    제 1 인수로 지정한 이름의 매크로가 정의되고 있으면 제 2 인수를 돌려주어, 정의되어 있지 않으면 제 3 인수를 돌려줍니다. 제 3 인수가 생략 되고 있었을 경우는, 그 값은 NULL (이)가 됩니다. 덧붙여서 unix 그렇다고 하는 단어가 미리 정의되고 있습니다.

ifelse
    제 1 인수가 제 2 인수와 매치 하면(자) 제 3 인수를 돌려줍니다. 매치하지 않았던 경우 (ifelse), 그 3 개의 인수는 버려져 다음의 3 인수를 이용해 같은 검사를 반복합니다. 이 처리는 인수가 없어지든가 혹은 1 개(살)만 남을 때까지 반복해져 어느 것에도 매치하지 않았던 경우에는 그 마지막에 남은 인수 또는 NULL (인수가 없어졌을 경우)(이)가 돌려주어집니다.

include
    제 1 인수로 지정된 파일의 내용을 돌려줍니다. 파일이 발견되지 않았던 경우는, include 패스를 명령행으로 -I 지정된 디렉토리를 지정하는지, 디렉토리마다 코론으로 나눈 리스트를 환경 변수 M4PATH (으)로 설정해 주세요. 파일을 include 할 수 없는 경우는, 에러 메세지를 표시해 이상종료(ABEND) 합니다.

incr
    인수를 1 만 증가시킵니다. 인수는 올바르게 수치를 표현하는 캐릭터 라인이 아니면 안됩니다.

index
    제 2 인수가, 제 1 인수 중(안)에서, 무슨 캐릭터눈에 출현할까를 돌려줍니다 (예를 들어 index(the quick brown fox jumped, fox) 그럼 16 이 돌아갑니다). 제 2 인수가 제 1 인수안에 포함되지 않았던 경우에는 index (은)는 -1 을 돌려줍니다.

indir
    제 1 인수로서 건네받는 항목의 매크로를 간접적으로 부릅니다. 그 이후는, 제 1 인수의 매크로에 대한 인수입니다.

len 제 1 인수의 캐릭터수를 돌려줍니다. 여분의 인수는 무시됩니다.

m4exit
    제 1 인수 (지정되지 않았던 경우는 0)를 종료 코드로서 즉석에서 종료합니다.

m4wrap
    입력이 마지막 EOF 에 이르렀을 때에, 어떠한 동작을 실시하는지를 설정합니다. 일반적으로는 여러 가지의 뒤처리를 실시하는 매크로를 설정합니다 (예를 들어, m4wrap(cleanup(tempfile)) )(으)로 하면(자) 다른 모든 처리가 종료했다 후에 cleanup 매크로가 불려 갑니다).

maketemp
    제 1 인수안의 캐릭터 라인 “XXXXX” (을)를 현재의 프로세스 ID 에 치환합니다. 그 외의 부분은 그대로입니다. 이것은 독특한 임시 파일명의 생성에 이용할 수 있습니다.

paste
    제 1 인수로 지정된 파일의 내용을 매크로 처리를 일절 실시하지 않고 include 합니다. 만약 파일을 읽어들일 수 없는 경우에는 에러 메세지를 출력해 처리를 중단합니다.

patsubst
    캐릭터 라인 가운데, 정규 표현에 매치 하는 부분이 치환 캐릭터 라인으로 옮겨놓을 수 있습니다. 통상은 다음의 대입 규칙이 적용됩니다: ampersand(&) (‘&’) (은)는, 정규 표현에 매치 한 캐릭터 라인으로 옮겨놓을 수 있습니다. 캐릭터 라인 ‘\#’ (# (은)는 수치) (은)는, 일치하는 후방 참조와 옮겨놓을 수 있습니다.

popdef
    각 인수에 pushdef 되고 있는 정의를 되돌립니다.

pushdef
    define (와)과 같은 인수를 취해 매크로를 정의합니다만 원의 정의를 스택에 보존해 둡니다. 보존된 정의는 다음에 popdef 그리고 되돌릴 수가 있습니다.

regexp
    정규 표현에 근거해, 캐릭터를 찾아냅니다. 제 2 인수까지의 경우는 최초로 매치 하는 캐릭터 위치를, 매치 하는 캐릭터가 없는 경우는 -1 을 돌려줍니다. 제 3 인수가 있는 경우, 그 중에 포함되는 패턴을 옮겨놓은 캐릭터 라인을 돌려줍니다.

shift
    제 1 인수를 제외한 모든 인수를 돌려줍니다. 나머지의 인수는 쿼트 되어 콤마로 단락지어집니다. 쿼트 하는 것에 의한 이후의 처리로 치환을 하지 않게 하고 있습니다.

sinclude
    에러가 일어나도 무시되는 점을 제외해 include (와)과 같습니다.

spaste
    에러가 일어나도 무시되는 점을 제외해 paste (와)과 같습니다.

substr
    제 1 인수의 캐릭터 라인 중 , 제 2 인수로 지정되는 오프셋(offset)로부터 시작되어 제 3 인수로 지정되는 캐릭터수의 범위의 부분 캐릭터 라인을 돌려줍니다. 제 3 인수가 생략 되었을 경우는 나머지의 캐릭터 라인 모두를 돌려줍니다.

syscmd
    제 1 인수를 쉘에 건네줍니다. 반환값은 없습니다.

sysval
    마지막에 실행했다 syscmd 의 반환값을 돌려줍니다.

traceon
    인수가 있는 경우는 그 매크로의 전개를 트레이스를 온으로 합니다. 인수가 없는 경우는 모든 매크로를 트레이스를 온으로 합니다.

traceoff
    인수가 있는 경우는 그 매크로의 전개를 트레이스를 오프로 합니다. 인수가 없는 경우는 모든 매크로를 트레이스를 오프로 합니다.

translit
    제 1 인수안의 캐릭터를, 제 2 인수로 지정된 캐릭터 집합으로부터 제 3 인수로 지정된 캐릭터 집합에 고쳐 씁니다. 다만 tr(1) 식의 생략 지정을 이용할 수 없습니다.

undefine
    인수로 지정된 매크로를 미정도리로 합니다.

undivert
    지정된 출력 큐 (인수가 없는 경우는 모든 큐)의 내용을 쓸어 냅니다.

unix
    OS 플랫폼을 조사하기 위해서(때문에) 미리 정의되고 있는 매크로입니다.

__line__
    현재의 파일의 행 번호를 돌려줍니다.

__file__
    현재의 파일명을 돌려줍니다.

진단

m4exit 매크로는, 입력 파일로부터 종료 상태로 변경하기 위해서 사용해 주세요.

호환성
m4 (은)는, GNU-m4 로부터 더해진 약간의 확장에 가세해, Single Unix Specification Version 2 에 추종 하고 있습니다. 플래그 -I, -d 및 -t (은)는 비표준입니다.

트레이싱포맛트 출력과 dumpdef (은)는, 임의의 표준으로 지정되지 않습니다. 그것들은, 변경하겠지요. 의존해 되지 않습니다. 현재의 트레이싱포맛트는, autoconf 하지만 기능할 수 있도록(듯이) GNU-m4 에 근거해 엄밀하게 작성되고 있습니다.

이식성을 위해서(때문에)는, builtin, esycmd, expr, indir, paste, patsubst, regexp, spaste, unix, __line__, 및 __file__ 의 매크로는, 사용하지 않는 편이 좋습니다.

모든 편입은, 다른 많은 m4 의 실장내에서, 인수없이 확장합니다.

다른 많은 m4 의 실장은, 버퍼 사이즈에 관해서, 매우 사이즈 제한을 실시하고 있습니다.

표준
The m4 유티리티는 p1003.1-2001 적합합니다.

역사
An m4 명령은, PWB UNIX 로부터 등장했습니다.

저자
-nosplit Ozan Yigit <oz@sis.yorku.ca> 및 Richard A. O'Keefe <ok@goanna.cs.rmit.OZ.AU>.
Marc Espie <espie@cvs.openbsd.org> 에 의한 GNU-m4 호환성 확장