printf 명령
용도
형식화된 출력을 씁니다.
구문
printf 형식 [ 인수 ... ]를 입력합니다
설명
printf 명령은 Argument 매개변수를 변환하고 형식화한 후에 이를 표준 출력에 씁니다. Argument 매개변수는 Format 매개변수의 제어 하에서 형식화됩니다. 형식화된 출력 행의 길이는 LINE_MAX 바이트를 초과할 수 없습니다.
printf 명령의 실행에 영향을 주는 환경 변수는 다음과 같습니다.
| 항목 | 설명 |
|---|---|
| Lang | LC_ALL 및 대응되는 환경 변수(LC_로 시작함) 모두가 로케일을 지정하지 않은 경우, 로케일 범주에 사용할 로케일을 판별합니다. |
| LC_ALL | LANG 또는 기타 LC_ 환경 변수의 설정에서 지정하는 로케일 범주의 값을 대체하는 데 사용되는 로케일을 판별합니다. |
| LC_CTYPE | 문자로서 텍스트 데이터의 바이트 시퀀스의 해석을 위한 로케일을 판별합니다. 예: 매개변수의 단일 바이트 대 복수 바이트 문자. |
| LC_MESSAGES | 메시지를 작성할 언어를 결정합니다. |
| LC_NUMERIC | 숫자 형식화에 대한 로케일을 판별합니다. 이 환경 변수는 e, E, f, g 및 G 변환 문자를 사용하여 쓰여진 숫자의 형식에 영향을 줍니다. |
Format 매개변수는 세 가지 유형의 오브젝트가 포함된 문자열입니다.
- 일반 문자는 출력 스트림에 복사됩니다.
- 변환 스펙. 각각의 변환 스펙은 값 매개변수 리스트에서 0개 이상의 항목이 검색될 수 있게 합니다.
- 다음과 같은 이스케이프 순서. 출력 스트림에 복사되는 경우, 이러한 시퀀스는 조치가 가능한 장치에서 해당 연관 조치가 표시되도록 합니다.
항목 설명 \\ 백슬래시 \a 경고 \b 백스페이스 \f 용지 넘김 \n 줄 바꾸기 \r 캐리지 리턴(CR) \t 탭 \v 세로 탭 \ddd 여기서 ddd는 한 자리, 두 자리 또는 세 자리 8진수입니다. 이러한 이스케이프 시퀀스는 8진수로 지정된 숫자값의 바이트로서 표시됩니다.
Argument 매개변수는 Format 매개변수의 제어 하에서 표준 출력에 쓰여지는 하나 이상의 문자열의 리스트입니다.
Format 매개변수는 Argument 매개변수를 충족시키기 위해 필요할 때마다 재사용됩니다. 모든 추가 c 또는 s 변환 사양은 null 문자열 인수가 제공된 것처럼 평가되고, 다른 추가 변환 사양은 0 인수가 제공된 것처럼 평가됩니다. Format 매개변수에 변환 스펙이 포함되지 않으며 Argument 매개변수가 존재하는 경우, 결과는 미지정입니다.
Format 매개변수의 각 변환 스펙에는 이 순서로 다음 구문이 있습니다.
- %(퍼센트 부호)
- 0개 이상의 옵션. 각 옵션은 변환 스펙의 의미를
수정합니다. 옵션 문자와 해당 의미는 다음과 같습니다.
항목 설명 - 변환 결과가 필드 내에서 왼쪽으로 정렬입니다. + 부호 있는 변환의 결과가 항상 부호(+ 또는 -)로 시작됩니다. 공백 부호 있는 변환의 첫 번째 문자가 부호가 아닌 경우, 공백이 결과에 접두어로 지정됩니다. 공백과 + 옵션 문자가 모두 표시되는 경우에는 공백 옵션 문자가 무시됩니다. # 이 옵션은 값이 대체 양식으로 변환됨을 지정합니다. C, d, i, u 및 s 전환의 경우 이 옵션은 적용되지 않습니다. O 변환의 경우 결과의 첫 자리가 0(0)이 되도록 정밀도를 높입니다. X 및 X 변환의 경우 0이 아닌 결과에는 각각 0x 또는 0X 접두사로 붙습니다. E, E, f, g, G 변환의 경우 기수 문자 뒤에 자릿수가 없더라도 결과에는 항상 기수 문자가 포함됩니다. g 및 G 변환의 경우, 트레일링 영(0)은 일반적인 경우처럼 결과에서 제거되지 않습니다. 0 D, i, o, u, x, e, E, f, g, G 변환의 경우 선행 0(부호 또는 기수 표시 뒤에 오는)을 사용하여 필드 너비로 패딩하고 공백 패딩을 수행하지 않습니다. 0(영) 및 -(빼기 부호) 옵션이 표시되는 경우에는 0(영) 옵션이 무시됩니다. D, i, o, u, x 및 X 변환의 경우 정밀도가 지정되면 0 (0) 옵션은 무시됩니다. 주: 다른 변환의 경우에는 작동이 정의되지 않습니다. - 최소 필드 폭을 지정하는 선택적 10진수 문자열. 변환된 값에 필드 폭보다 적은 수의 문자가 있는 경우, 필드는 필드 폭에서 지정하는 길이로 왼쪽에서 채워집니다. 왼쪽 조정 옵션이 지정된 경우에는 필드가 오른쪽에서 채워집니다. 변환의 결과가 필드 폭보다 큰 경우에는 변환된 결과를 포함하기 위해 필드가 확장됩니다. 절단은 발생하지 않습니다. 그러나 작은 정밀도를 사용하면 오른쪽에서 절단될 수 있습니다.
- 선택적 정밀도. 정밀도는 . (점)과 10진수 숫자 문자열을 차례로 연결한 것입니다. 정밀도가 제공되지 않은 경우, 이는 0(영)으로 처리됩니다. 정밀도는 다음을 지정합니다.
- 적용할 변환 유형을 나타내는 다음과 같은 문자
항목 설명 % 변환을 수행하지 않습니다. %(퍼센트 부호)를 인쇄합니다. a, A 부동 소수점 값을 승인하고 이 값을 [-]0xh.hhhhp±d형식의 10진수 표기법으로 변환합니다. 10진수 표기법에는 소수점 앞에 16진수 자리 하나가 포함됩니다. 지정된 부동 소수점 값이 정상화된 부동 소수점 값이거나 지정되지 않은 경우 이 16진수 자리는 0이 아닌 값이어야 합니다. 소수점 뒤의 16진수 자릿수는 정밀도 값을 표시합니다. Format 매개변수를 사용하여 정밀도 값을 지정하지 않고 FLT_RADIX 인수의 지수 값이 2인 경우, 정밀도 값은 부동 소수점 값을 나타냅니다. 정밀도 값을 지정하지 않고 FLT_RADIX 인수의 지수 값이 2가 아닌 경우, 정밀도 값은 a, A 변환 지정자가 사용하는 내부 표현 형식의 서로 다른 부동 소수점 값을 구별할 수 있습니다. 10진수 표기법의 끝자리 0은 제거될 수 있습니다. 정밀도 값이 0이고 # 플래그를 지정하지 않으면 소수점이 표시되지 않습니다.abcdef문자는 a 변환 지정자에 사용되고ABCDEF문자는 A 변환 지정자에 사용됩니다. A 변환 지정자는 문자 X와 P 대신 문자 X와 P가 포함된 숫자를 제공합니다. 2의 10진수지수를 표시하려면 FLT_RADIX 인수의 지수가 한 자리에서 필요한 만큼의 숫자를 포함해야 합니다. 부동 소수점 값이 0이면 지수 값도 0입니다. 무한대 또는 NaN 데이터 유형을 나타내는 부동 소수점 값은 f, F 변환 지정자의 형식으로 변환됩니다.d, i 정수값을 허용하고 이를 부호 있는 10진수 표기법으로 변환합니다. 정밀도는 표시되는 최소 자리수를 지정합니다. 변환 중인 값이 보다 작은 숫자로 표현될 수 있는 경우, 이는 선행 영(0)으로 확장됩니다. 디폴트 정밀도는 1입니다. 0의 정밀도로 0 값을 변환한 결과는 널(null) 문자열입니다. 선행 문자로서 영(0)으로 필드 폭을 지정하면 필드 폭 값이 선행 영(0)으로 채워집니다. O 정수값을 허용하고 이를 부호 있는 8진수 표기법으로 변환합니다. 정밀도는 표시되는 최소 자리수를 지정합니다. 변환 중인 값이 보다 작은 숫자로 표현될 수 있는 경우, 이는 선행 영(0)으로 확장됩니다. 디폴트 정밀도는 1입니다. 0의 정밀도로 0 값을 변환한 결과는 널(null) 문자열입니다. 선행 문자로서 영(0)으로 필드 폭을 지정하면 필드 폭 값이 선행 영(0)으로 채워집니다. 필드 폭에 대한 8진수 값은 포함되지 않습니다. u 정수값을 허용하고 이를 부호 없는 10진수 표기법으로 변환합니다. 정밀도는 표시되는 최소 자리수를 지정합니다. 변환 중인 값이 보다 작은 숫자로 표현될 수 있는 경우, 이는 선행 영(0)으로 확장됩니다. 디폴트 정밀도는 1입니다. 0의 정밀도로 0 값을 변환한 결과는 널(null) 문자열입니다. 선행 문자로서 영(0)으로 필드 폭을 지정하면 필드 폭 값이 선행 영(0)으로 채워집니다. x, X 정수값을 허용하고 이를 16진수 표기법으로 변환합니다. abcdef 문자는 x 변환에 사용되며, ABCDEF 문자는 X 변환에 사용됩니다. 정밀도는 표시되는 최소 자리수를 지정합니다. 변환 중인 값이 보다 작은 숫자로 표현될 수 있는 경우, 이는 선행 영(0)으로 확장됩니다. 디폴트 정밀도는 1입니다. 0의 정밀도로 0 값을 변환한 결과는 널(null) 문자열입니다. 선행 문자로서 영(0)으로 필드 폭을 지정하면 필드 폭 값이 선행 영(0)으로 채워집니다. f, F 부동 소수점 값을 받아 [-] ddd.ddd형식의 소수점 표기법으로 변환합니다. 기수 문자 또는 소수점 뒤의 자릿수는 지정된 정밀도 값과 같습니다. LC_NUMERIC 로케일 범주는 이 형식으로 사용되어야 하는 기수 문자를 판별합니다. 정밀도 값이 부동 소수점 값에서 제거되면 6자리가 출력에서 기수 문자 뒤에 추가됩니다. 정밀도 값이 0인 경우에는 기수 문자가 표시되지 않습니다. 무한대 데이터 유형을 나타내는 부동 소수점 값은[-]inf또는[-]infinity형식으로 변환됩니다.[-]inf또는[-]infinity형식은 구현별로 다릅니다. NaN 데이터 유형을 나타내는 부동 소수점 값은[-]nan(n-char-sequence) 또는[-]nan형식으로 변환됩니다. n-char-sequence의 의미는 구현별로 다릅니다. F 변환 지정자는inf,infinity또는nan대신에INF,INFINITY또는NAN형식을 제공합니다.e, E float 또는 double 값을 수신하고 이를 지수 양식 [-] d.dde{+|-}dd로 변환합니다. 기수 문자 이전에 하나의 자릿수가 있으며(여기서는 소수점으로 표시됨), 기수 문자 이후의 자릿수는 정밀도 스펙과 동일합니다. LC_NUMERIC 로케일 범주는 이 형식으로 사용할 기수 문자를 판별합니다. 정밀도가 지정되지 않은 경우에는 6자리가 출력됩니다. 정밀도가 0(영)인 경우에는 기수 문자가 표시되지 않습니다. E 변환 문자는 지수 앞에 e 대신에 E가 있는 숫자를 생성합니다. 지수에는 항상 최소한 두 개의 자리수가 포함됩니다. 그러나 인쇄되는 값이 두 자리를 초과하는 지수를 요구하는 경우에는 필요에 따라 추가 지수 자릿수가 인쇄됩니다. g, G 실수 또는 이중 값을 받아 f 또는 e 변환 문자( G 변환의 경우 E ) 스타일로 변환하며, 정밀도는 유효 자릿수를 지정합니다. 트레일링 영(0)은 결과에서 제거됩니다. 기수 문자는 뒤에 숫자가 나오는 경우에만 표시됩니다. 사용된 스타일은 변환된 값에 따라 다릅니다. 스타일 g의 결과는 변환의 결과인 지수가 -4 미만이거나 정밀도 이상인 경우에만 나타납니다. c 값을 문자열로서 수신하고 문자열의 첫 문자를 인쇄합니다. s 값을 문자열로서 수신하고 문자열의 끝에 도달하거나 정밀도에서 지시하는 문자 수에 도달할 때까지 문자열의 문자를 인쇄합니다. 정밀도가 지정되지 않은 경우에는 첫 번째 널 문자까지의 모든 문자가 인쇄됩니다. b 백슬래시 이스케이프 시퀀스가 포함될 수 있는 문자열로서 값을 허용합니다. 문자열의 끝이나 정밀도 스펙에서 지시하는 바이트 수에 도달할 때까지 변환된 문자열의 바이트가 인쇄됩니다. 정밀도가 생략된 경우에는 첫 번째 널 문자까지의 모든 바이트가 인쇄됩니다.
다음의 백슬래시-이스케이프 시퀀스가 지원됩니다.
- Format 매개변수에 대한 설명 아래에 이미 나열된 이스케이프 순서. 이는 표시된 개별 문자로 변환됩니다.
- printf 명령으로 인해 \c(백슬래시 c) 문자열을 포함하는 문자열 매개변수의 나머지 문자, 나머지 문자열 매개변수 그리고 Format 매개변수에 있는 추가 문자를 무시하게 하는 \c 문자열. 이 문자열은 표시되지 않습니다.
종료 상태
이 명령은 다음과 같은 종료값을 리턴합니다.
| 항목 | 설명 |
|---|---|
| 0 | 정상적으로 완료되었습니다. |
| >0 | 오류가 발생했습니다. |
예
- 다음과 같은 명령을 입력하십시오.
그러면 다음 출력이 생성됩니다.printf "%5d%4d\n" 1 21 321 4321 54321
Format 매개변수는 제공된 모든 문자열을 인쇄하기 위해 세 번 사용됩니다. 0(0)은 printf 명령에 의해 마지막%4d변환 사양.1 21 3214321 54321 0 - 다음과 같은 명령을 입력하십시오.
그러면 다음 출력이 생성됩니다.printf "%c %c\n" 78 797 7 - 다음 예는 %$ 형식 지정자를 사용하여 인수의 순서와는 다른 순서로 날짜를 인쇄하는 방법을 예시합니다.
printf (""%1$s, %3$d. %2$s, %4$d:%5$.2d", weekday, month, day, hour, min); Sunday, 3. July, 10:02 (weekday, day. month, hour:min)
파일
| 항목 | 설명 |
|---|---|
| /usr/bin/printf | printf 명령을 포함합니다. |