English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이전 장에서 Shell의 echo 명령어를 배웠습니다. 이 장에서는 Shell의 또 다른 출력 명령어인 printf를 배우겠습니다.
printf 명령어는 C 프로그램 라이브러리(library)의 printf() 프로그램을 모방합니다.
printf는 POSIX 표준에 정의되어 있으므로, 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:기본教程网 # url:ko.oldtoolbag.com 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 모두 포맷 대체 기호입니다%s 한 문자열을 출력하며,%d 정수형 출력하며,%c 한 문자를 출력하며,%f 실수를 출력하며, 소수점 형식으로 출력합니다.
%-10s는 너비가 10 자리수- 표시되면 왼쪽 정렬되고, 없으면 오른쪽 정렬되며, 모든 문자가 10 자리수의 문자 내에 있으면, 부족하면 자동으로 공백으로 채우고, 초과하면 모든 내용을 표시합니다.
%-4.2f는 소수점으로 포맷화하며, .2 지정2위소수점.
#!/bin/bash # author:기본教程网 # url:ko.oldtoolbag.com # 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 # 인자가 없으면 %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
시퀀스 | 설명 |
---|---|
\a | 경고 문자, 일반적으로 ASCII의 BEL 문자 |
\b | 뒤로 가기 |
\c | 출력 결과의 끝에 있는 모든 줄 바꿈 문자를 억제(표시하지 않음)(%b 형식 지시자에 의해 제어된 매개변수 문자열에서만 유효), 그리고 매개변수에 남아 있는 모든 문자, 그리고 다음 매개변수, 그리고 포맷 문자열에 남아 있는 모든 문자는 무시됨 |
\f | 페이지(formfeed) |
\n | 줄 바꿈 |
\r | 카리지 리턴(Carriage return) |
\t | 수평 테이블 스페이스 |
\v | 수직 테이블 스페이스 |
\\ | 문자面上的 반대쪽 슬래시 문자 |
\ddd | 표시1부터3자리수 8진수 값의 문자. 포맷 문자열에서만 유효 |
\0ddd | 표시1부터3의 8진수 값 문자 |
$ printf "a 문자열, 처리 없음:<%s>\n" "A\nB" a 문자열, 처리 없음:<A\nB> $ printf "a 문자열, 처리 없음:<%b>\n" "A\nB" a 문자열, 처리 없음:<A B> $ printf "ko.oldtoolbag.com \a" ko.oldtoolbag.com $ #없는 줄 바꿈