쉘 printf 명령


이전 장에서는 Shell의 echo 명령어에 대해 알아보았습니다. 이번 장에서는 Shell의 또 다른 출력 명령어인 printf에 대해 알아보겠습니다.

printf 명령은 C 라이브러리의 printf() 프로그램을 모방합니다.

표준에 따라 정의되므로 printf를 사용하는 스크립트는 echo를 사용하는 것보다 이식성이 더 좋습니다.

printf는 인용된 텍스트나 공백으로 구분된 매개변수를 사용합니다. printf에서 형식이 지정된 문자열을 사용할 수 있으며 문자열의 너비, 왼쪽 및 오른쪽 정렬 등을 지정할 수도 있습니다. 기본적으로 printf는 echo와 같은 개행 문자를 자동으로 추가하지 않으므로 n을 수동으로 추가할 수 있습니다.

Printf 명령 구문:

printf  format-string  [arguments...]

매개변수 설명:

  • format-string:은 형식 제어 문자열입니다.

  • arguments:는 매개변수 목록입니다.

예제는 다음과 같습니다.

$ echo "Hello, Shell"
Hello, Shell
$ printf "Hello, Shell\n"
Hello, Shell
$

다음으로 printf의 강력한 기능을 반영하는 스크립트를 사용하겠습니다.

#!/bin/bash
# author:php中文网
# url:www.php.cn
 
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234 
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543 
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

스크립트를 실행하면 출력 결과는 다음과 같습니다.

姓名     性别   体重kg
郭靖     男      66.12
杨过     男      48.65
郭芙     女      47.99

%s %c % d %f는 모두 형식 대체 문자

%-10s는 10자 너비를 나타냅니다(-는 왼쪽 정렬을 의미하고, 그렇지 않으면 오른쪽 정렬을 의미합니다). 부족하면 자동으로 공백이 채워집니다. 한도를 초과하면 모든 내용이 표시됩니다.

%-4.2f는 소수점 이하 자릿수 2자리를 유지한다는 의미입니다.


추가 예:

#!/bin/bash
# author:php中文网
# url:www.php.cn
 
# format-string为双引号
printf "%d %s\n" 1 "abc"

# 单引号与双引号效果一样 
printf '%d %s\n' 1 "abc" 

# 没有引号也可以输出
printf %s abcdef

# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def

printf "%s\n" abc def

printf "%s %s %s\n" a b c d e f g h i j

# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"

는 스크립트를 실행하고 출력은 다음과 같습니다.

1 abc
1 abc
abcdefabcdefabc
def
a b c
d e f
g h i
j  
 and 0

printf

sequenceExplanation
a의 이스케이프 시퀀스 경고 문자, 일반적으로 ASCII BEL 문자의 경우
bback
c은 출력 결과에서 후행 개행 문자를 억제(표시하지 않음)합니다(%b 형식 지정자로 제어되는 매개변수 문자열에서만 유효함). 매개변수에 남아 있는 모든 문자, 후속 매개변수 및 형식 문자열에 남아 있는 모든 문자는 무시됩니다
fformfeed(formfeed)
n라인 피드
r캐리지 리턴
t가로 탭 문자
v세로 탭 문자
\ 대시 문자
ddd1을 나타내는 문자 3자리 8진수 값. 형식 문자열에서만 유효합니다