SW/리눅스

Linux : Bash printf 명령어, 예제, 사용 방법

얇은생각 2022. 9. 30. 07:30
반응형

일반적으로 bash 스크립트를 작성할 때 echo를 사용하여 표준 출력으로 인쇄합니다. echo는 간단한 명령이지만 기능이 제한됩니다.

출력 형식을 보다 세부적으로 제어하려면 printf 명령을 사용합니다.

printf 명령은 C printf() 함수와 마찬가지로 인수 형식을 지정하고 인쇄합니다.

 

 

Linux : Bash printf 명령어, 예제, 사용 방법

 

 

printf 명령

printf는 Bash와 Zsh, Ksh와 같은 다른 인기 있는 셸에 내장된 셸입니다. 독립 실행형 /usr/bin/printf 바이너리도 있지만 셸 기본 제공 버전이 우선합니다. 우리는 printf의 Bash 빌트인 버전을 다룰 것입니다.

printf 명령의 구문은 다음과 같습니다.

printf [-v var] format [arguments]

 

 

-v 옵션은 printf에게 출력을 인쇄하지 말고 변수에 할당하도록 지시합니다.

형식은 세 가지 유형의 개체를 포함할 수 있는 문자열입니다.

있는 그대로 출력에 인쇄되는 일반 문자입니다.

해석된 다음 인쇄되는 백슬래시 이스케이프 문자입니다.

형식을 설명하고 형식 문자열 뒤에 오는 각 인수의 값으로 대체되는 변환 사양입니다.

 

명령어는 원하는 개수의 인수를 허용합니다. 형식 지정자보다 많은 인수가 제공된 경우 형식 문자열은 모든 인수를 사용하기 위해 재사용됩니다. 형식 지정자보다 적은 수의 인수가 제공된 경우 추가 숫자 형식 지정자는 0 값으로 설정되고 문자열 형식 지정자는 null 문자열로 설정됩니다.

다음은 printf 명령을 사용하여 인수를 전달할 때 고려해야 할 몇 가지 사항입니다.

셸은 printf 명령에 인수를 전달하기 전에 모든 변수, 와일드카드 일치 및 특수 문자를 대체합니다.

작은따옴표 '를 사용하면 따옴표 안에 둘러싸인 각 문자의 리터럴 값이 유지됩니다. 변수와 명령은 확장되지 않습니다.

printf "Open issues: %s\nClosed issues: %s\n" "34" "65"

# Open issues: 34
# Closed issues: 65

 

 

Open issue: %s\nClosed issue: %s\n은 형식이고 "34" 및 "65"는 인수입니다. 형식 문자열에는 인수로 대체되는 두 개의 줄 바꿈 문자(\n)와 두 개의 형식 지정자(%s)가 포함되어 있습니다.

printf 명령은 줄 끝에 줄 바꿈 문자(\n)를 추가하지 않습니다.

 

 

 

백슬래시 이스케이프된 문자

백슬래시 이스케이프된 문자는 형식 문자열 또는 %b 변환 지정자에 해당하는 인수에 사용될 때 해석됩니다. 다음은 가장 일반적인 이스케이프 문자 목록입니다.

 

\\ - 백슬래시 문자를 표시합니다.

\b - 백스페이스 문자를 표시합니다.

\n - 새 줄을 표시합니다.

\r - 캐리지 리턴을 표시합니다.

\t - 수평 탭을 표시합니다.

\v - 수직 탭을 표시합니다.

 

 

 

변환 사양

변환 사양은 다음과 같은 형식을 취합니다.

%[flags][width][.precision]specifier

 

 

백분율 기호(%)가 있는 각 변환 규격 별에는 선택적 표현식이 포함되어 있으며 해당 인수의 데이터 유형(지정자)을 나타내는 다음 문자 중 하나로 끝납니다. aAbcdeEfgGioqsuX.

 

 

 

형식 변환 지정자

유형 변환 지정자는 해당 인수를 해석하는 방법을 지정하는 문자입니다. 이 문자는 필수이며 선택 필드 뒤에 배치됩니다.

아래는 모든 유형 변환과 변환 작업을 보여 주는 목록입니다.

 

%b - 백슬래시 이스케이프 시퀀스를 확장하는 동안 인수를 인쇄합니다.

%q - 셸 따옴표로 묶인 재사용 가능한 인수를 입력으로 인쇄합니다.

%d, %i - 인수를 부호 있는 소수 정수로 인쇄합니다.

%u - 인수를 부호 없는 십진 정수로 인쇄합니다.

%o - 인수를 부호 없는 8진 정수로 인쇄합니다.

%x, %X - 인수를 부호 없는 16진수 정수로 인쇄합니다. %x는 소문자를 인쇄하고 %X는 대문자를 인쇄합니다.

%e, %E - 인수를 지수 표기법으로 부동 소수점 숫자로 인쇄합니다. %E은(는) 소문자를 인쇄하고 %E은(는) 대문자를 인쇄합니다.

%a, %A - 인수를 16진수 분수 표기법으로 부동소수점으로 인쇄합니다. %a은(는) 소문자를 인쇄하고 %A는 대소문자를 인쇄합니다.

%g, %G - 인수를 지정된 값과 정밀도에 더 적합한 부동소수점 표기법으로 인쇄합니다. %g은 소문자를 인쇄하고 %G는 대문자를 인쇄합니다.

%c - 인수를 단일 문자로 인쇄합니다.

%f - 인수를 부동 소수점 숫자로 인쇄합니다.

%s - 인수를 문자열로 인쇄합니다.

%% - 리터럴 % 기호를 인쇄합니다.

 

부호 없는 숫자는 0과 양수를 나타내고 부호 있는 숫자는 음수, 0 및 양수를 나타냅니다.

다음 명령은 세 가지 다른 숫자 시스템으로 숫자 100을 인쇄합니다.

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100

# Decimal: 100
# Hex: 64
# Octal: 144

 

 

 

플래그 지시문

플래그는 첫 번째 선택적 수정자로 맞춤, 선행 0, 접두사 등을 설정하는 데 사용됩니다.

가장 일반적인 예는 다음과 같습니다.

 

- - 인쇄된 텍스트를 필드 내에서 왼쪽으로 맞춥니다. 기본적으로 텍스트는 오른쪽으로 정렬됩니다.

+ - 숫자 앞에 + 또는 - 기호를 붙입니다. 기본적으로 음수만 음수 기호 앞에 붙습니다.

0 - 숫자를 공백 대신 선행 0으로 패딩합니다.

공백 - 양수 앞에 공백을 붙이고 음수 앞에 빼기(-)를 붙입니다.

# - 숫자에 대한 대체 형식입니다.

 

 

 

폭 지시문

너비 지시문 파일은 플래그 문자 뒤에 배치되며 변환에 사용할 최소 문자 수를 지정합니다.

출력된 텍스트 너비가 지정된 너비보다 작으면 공백으로 채워집니다. 너비는 음수가 아닌 소수점 정수 또는 별표(*)로 지정할 수 있습니다.

%20s은 필드 길이를 20자 이상으로 설정함을 의미합니다. 기본적으로 출력이 오른쪽 정렬되므로 공백이 텍스트 앞에 추가됩니다. 텍스트를 왼쪽으로 정렬하려면 - 플래그(%-20s)를 사용합니다.

printf "%20s %d\n" Mark 305

#       Mark 305

 

 

별표(*)가 너비 지시문으로 사용되는 경우 변환 필드의 너비는 형식 지정 중인 인수 앞에 있는 너비 인수로 설정됩니다.

아래 예에서는 너비를 10으로 설정합니다.

printf "%0*d" 10 5

# 0000000005

 

 

0은 숫자를 공백 대신 선행 0으로 채우는 플래그입니다. 출력 텍스트는 10자 이상이어야 합니다.

 

 

 

정밀 지시문

.precision 표현식은 점(.) 뒤에 양의 정수 또는 별표(*)로 구성되며, 지정자 유형에 따라 문자열 또는 숫자 문자 수 또는 인쇄할 소수 자릿수를 설정합니다.

정밀도는 다음과 같은 영향을 미칩니다.

 

변환 유형이 정수인 경우 정밀도는 인쇄할 최소 자릿수를 지정합니다. 인수의 자릿수가 정확도보다 작으면 선행 0이 인쇄됩니다.

변환 유형이 부동 소수점인 경우 정밀도는 소수점 문자 뒤에 오는 자릿수를 지정합니다. 기본 정밀도는 6입니다.

변환 유형이 문자열인 경우 정밀도는 인쇄할 최대 문자 수를 지정합니다. 인수의 문자 수가 정확도보다 크면 초과된 문자는 잘립니다.

다음은 부동 소수점 숫자를 소수점 3개로 반올림하는 방법을 보여주는 예입니다.

printf "%.3f" 1.61803398

# 1.618

 

 

정밀도를 별표(*)로 설정하면 해당 값은 형식 지정 중인 인수 앞에 오는 정밀도 인수에 의해 설정됩니다.

printf "%.*f" 3 1.61803398

# 1.618

 

 

printf 명령은 형식과 인수를 사용하고 서식 있는 텍스트를 인쇄합니다.

반응형