공부하다 Linux에서 Bash printf 명령을 사용하는 방법

Linux에서 Bash printf 명령을 사용하는 방법

~에 의해 Frank
게시됨: 마지막 업데이트 날짜

소개

Bash printf 명령은 Linux 터미널 창에 쓸 때 echo 명령보다 더 많은 유연성과 형식 선택을 제공합니다. printf의 특성조차도 유익할 수 있습니다.

소프트웨어 작업의 가장 기본적인 측면 중 하나입니다. 응용 프로그램이 화면에 쓴 내용을 읽습니다. Unix에서 파생되고 Linux에서 지원되는 명령줄 프로그램의 습관이 가능한 한 짧음에도 불구하고 많은 응용 프로그램은 문제가 발생할 때만 터미널에 씁니다. 중요한 프로그래밍 기본은 사용자에게 현재 발생하거나 발생할 예정이거나 최근에 발생한 일을 알리는 것입니다.

Bash 쉘의 echo 명령은 터미널 디스플레이에 텍스트를 쓸 수 있습니다. 스크립트나 명령줄에서 사용할 수 있으며 변수를 처리하고 문자열에 포함된 경우 해당 값을 표시할 수 있습니다. 그렇다면 printf의 요점은 무엇입니까? 에코가 처리하는 텍스트 작성이 아닌가요? 반면에 Printf는 터미널 창에 문자열을 쓰는 기능 이상을 제공합니다. 출력 형식 지정과 관련하여 다양한 기능을 제공하며 소매에 몇 가지 추가 트릭이 있습니다.

Bash의 printf 명령은 C의 printf 함수와 유사하지만 몇 가지 변경 사항이 있습니다. C에 익숙하다면 변경 사항을 알고 있어야 합니다.

간단한 문자열 만들기

터미널에 문자열을 쓸 때 echo와 printf의 차이점을 살펴보겠습니다.

echo 여기에 몇 가지 단어가 있습니다.
printf 여기에 몇 가지 단어가 있습니다

인용되지 않은 단어와 함께 echo 및 printf 사용

echo는 모든 단어를 인쇄하지만 printf는 첫 번째 단어만 게시합니다. 또한 printf는 새 줄을 인쇄하지 않습니다. 출력은 명령 프롬프트 중간에 smack dab입니다. 그러나 무엇보다도 먼저 모든 단어를 인용해야 printf가 단어에 작용할 수 있습니다.

echo 여기에 몇 가지 단어가 있습니다.
printf "여기에 몇 가지 단어가 있습니다"

인용된 단어와 함께 echo 및 printf 사용

한 걸음 더 나아간 것입니다. 모든 단어를 인쇄했지만 여전히 새 줄을 기다리고 있습니다. printf는 특별히 요청한 경우에만 새 줄을 인쇄하기 때문입니다. 불편하게 들릴 수 있지만 추가 여부를 선택할 수 있습니다. printf가 새 줄을 내보내려면 문자열에 "n"을 추가해야 합니다. "개행" 이스케이프 시퀀스가 여기에 사용됩니다.

echo 여기에 몇 가지 단어가 있습니다.
printf "여기에 몇 가지 단어가 있습니다n"

따옴표 붙은 단어와 줄 바꿈 문자와 함께 echo 및 printf 사용

때때로 개행을 사용하고 다른 것은 사용하지 않을 것입니다. 이 예에서 하나의 printf 명령은 새 줄을 사용하지만 다른 하나는 사용하지 않습니다.

printf "사용 방법" && printf "Geekn"

두 개의 printfs를 사용하여 한 줄의 텍스트 만들기

첫 번째 printf는 새 줄을 인쇄하지 않기 때문에 두 번째 printf의 출력은 "How-To"와 같은 줄에 배치됩니다. 새 줄을 인쇄하기 위해 두 번째 printf는 n을 사용합니다. 이제 명령 프롬프트가 인쇄된 텍스트 아래 줄에 표시됩니다.

포획을 피한 캐릭터

다음은 이스케이프로 사용할 수 있는 몇 가지 추가 문자입니다. 이전에 "n"이 어떻게 작동하는지 보았습니다.

n: 새 줄로 전환합니다.
r: 이 명령은 캐리지 리턴을 인쇄합니다. 출력 커서는 현재 줄의 시작 부분으로 반환됩니다.
t: 이 명령은 탭 문자를 인쇄합니다.
v: 페이지에 세로 탭 공간을 추가합니다.
\: 백슬래시 문자가 인쇄됩니다.
": 따옴표를 표시합니다.
b: 백스페이스 문자를 표시합니다.

캐리지 리턴 이스케이프 문자는 커서를 현재 줄의 시작 부분으로 되돌리는 데 사용됩니다.

printf "꿀은 모든 악의 근원입니다rMoneyn"

캐리지 리턴 문자를 사용하여 줄의 시작 부분으로 다시 이동

printf 명령은 왼쪽에서 오른쪽으로 읽습니다. printf가 "r" 이스케이프 문자를 감지할 때까지 문자열은 일반 텍스트처럼 작성됩니다. 출력 커서는 현재 줄의 시작 부분에 재배치됩니다.

"r" 문자 바로 아래에 있는 문자로 문자열 처리가 계속됩니다. 나머지는 printf가 "Honey"라는 구를 대체하는 "Money"를 인쇄하도록 합니다.

백슬래시 "" 문자는 이스케이프 시퀀스를 나타내는 반면 인용 부호 """는 문자열을 인용하는 데 사용됩니다. 이러한 문자를 인쇄하려면 백슬래시를 사용하여 이스케이프하십시오. 이것은 printf에게 리터럴 문자로 처리해야 함을 지시합니다.

printf "이것은 tTab이고, 이것은 인용 부호 "이고, 이 \는 백슬래시입니다."

문자를 문자 그대로 처리하도록 이스케이프 처리

작동하는 변수

printf와 함께 변수를 사용하는 것은 echo와 함께 변수를 사용하는 것과 매우 유사합니다. 이 환경 변수와 같은 변수를 포함하려면 앞에 달러 기호 "$"를 평소와 같이 사용합니다.

printf "홈 디렉토리: $HOMEn"

환경 변수와 함께 printf 사용

문자열 형식화

형식 문자열은 출력 형식을 지정하는 문자열입니다. 형식 문자열 텍스트와 작업할 추가 값을 인수로 제공합니다.

텍스트, 이스케이프 시퀀스 및 형식 지정자는 모두 형식 문자열에 포함될 수 있습니다.

Printf의 형식 지정자는 문자열, 숫자 또는 문자와 같이 어떤 종류의 인수를 받아들여야 하는지 알려줍니다.

가장 자주 사용되는 형식 지정자는 다음과 같습니다. 퍼센트 "퍼센트" 기호가 모두 앞에 옵니다. 두 퍼센트 기호 "퍼센트 퍼센트"를 결합하여 퍼센트 기호를 인쇄할 수 있습니다.

  • %s: 문자열을 출력합니다.
  • %c: 단일 문자를 인쇄합니다.
  • %d: 정수를 출력합니다.
  • %f: 부동 소수점 숫자를 인쇄합니다.
  • %u: 부호 없는 정수를 출력합니다.
  • %o: 8진수로 값을 인쇄합니다.
  • %x: Prints a value in 16진수, 소문자.
  • %X: 16진수로 값을 대문자로 출력합니다.
  • %e: 과학 표기법의 부동 소수점 숫자를 소문자로 인쇄합니다.
  • %E: 과학적 표기법의 부동 소수점 숫자를 대문자로 인쇄합니다.
  • %%: Prints a percent “%” symbol.
printf "%sn 사용법" "긱"
printf "%s%s %sn" "How" "-To" "Geek"

"너무 많은" 인수를 허용하는 printf 표시

첫 번째 명령의 형식 문자열에는 자체 콘텐츠가 포함되어 있습니다. "Geek" 문자열이 printf에 인수로 전송됩니다. "%s" 형식 지정자가 일치하여 인쇄합니다. 형식 문자열과 인수 문자열 사이에는 공백만 있습니다. C에서는 이들을 구분하기 위해 쉼표가 필요하지만 Bash 버전의 printf에서는 공백으로 충분합니다.

형식 지정자와 줄 바꿈 이스케이프 시퀀스만 두 번째 형식 문자열에 포함됩니다. 각 "%s" 형식 지정자는 세 개의 문자열 매개변수를 차례로 사용합니다. 다시 말하지만, C에서는 각 매개변수 사이에 쉼표가 필요하지만 Bash printf 함수를 사용하면 이 요구사항을 무시할 수 있습니다.

다양한 종류의 인수를 출력하려면 적절한 형식 지정자를 사용하기만 하면 됩니다. 다음은 간단한 printf 기반 숫자 변환 함수입니다. 10진수, 8진수, 16진수 표기법으로 숫자 15를 출력합니다.

printf "12월: %dnOct: %onHex: %xn" 15 15 15

printf를 사용하여 다른 기본 표기법으로 숫자 값 인쇄

예제를 덜 복잡하게 만들기 위해 조금 줄여 보겠습니다.

printf "16진수: %xn" 15

16진수 값 인쇄

우리 대부분은 16진수가 대문자로 표시되고 앞에 0이 오는 0x10보다 작은 값을 보는 데 익숙합니다. 퍼센트 기호 "%"와 "X" 문자 사이에 너비 지정자를 배치하고 대문자 16진수 형식 지정자 "% X"를 활용하여 이를 수행할 수 있습니다.

이것은 인자가 printf에 인쇄되어야 하는 필드의 크기를 지정합니다. 필드에 공백이 추가되었습니다. 이 스타일에서는 패딩 없이 두 자리 숫자가 표시됩니다.

printf "16진수: %2Xn" 15

2자 너비 필드에 대문자로 16진수 값 인쇄

이제 선행 공백이 쓰여진 대문자 값이 있습니다. 두 개 앞에 0을 배치하면 printf가 필드를 공백 대신 0으로 채울 수 있습니다.

printf "Hex: %02Xn" 15

0으로 채워진 2자 너비 필드에 대문자로 16진수 값 인쇄

정밀도 지정자를 사용하면 출력에 포함되어야 하는 소수점 수를 지정할 수 있습니다.

printf "Floating point: %08.3fn" 9.243546

부동 소수점 숫자와 함께 너비 및 정밀도 수정자 사용

이렇게 하면 완벽하게 정렬된 출력으로 결과 테이블을 쉽게 만들 수 있습니다. 이 명령은 Bash printf의 또 다른 특징도 표시합니다. 형식 지정자보다 더 많은 인수가 있는 경우 인수는 모두 사용할 때까지 일괄적으로 형식 문자열에 공급됩니다. 형식 문자열에 있는 형식 지정자의 양은 주어진 순간에 처리되는 일괄 처리의 크기를 결정합니다. C에서 printf 함수에 보낸 추가 인수는 무시됩니다.

printf "Float: %8.3fn" 9.243546 23.665 8.0021

너비 및 정밀도 수정자를 사용하여 깔끔한 테이블 만들기

문자열은 너비 및 정밀도 지정자를 사용할 수도 있습니다. 문자열은 이 명령을 사용하여 10자 너비의 필드에 인쇄됩니다.

printf "%10s %dn" "coats" 7 "shoes" 22 "Umbrellas" 3

문자열과 함께 너비 수정자 사용

By default, values are right-justified in their fields. To left-justify them, use a minus sign “-” immediately behind the percent “%” sign.

printf "%-10s %d" "코트" 7 "신발" 22 "우산" 3

문자열과 함께 왼쪽 맞춤 너비 지정자 사용

정밀도 지정자를 사용하면 인쇄할 최대 문자 수를 선택할 수 있습니다. 콜론 문자 ":"는 너비 필드의 제한을 나타내는 데 사용됩니다. "우산"이라는 용어가 단축되는 방식이 아닙니다.

printf ":%10.6s:n" "coats" "shoes" "Umbrellas"
printf ":%-10.6s:n" "코트" "신발" "우산"

정밀도 수정자를 사용하여 문자열에서 인쇄되는 문자 수 제한

인수로도 너비 지정자를 사용할 수 있습니다. 숫자 지정자 대신 별표 "*"를 사용하고 너비를 정수 입력으로 제공합니다.

printf "%*sn" 20 "가장 오른쪽" 12 "가운데" 5 "가장 왼쪽"

너비 지정자를 printf에 인수로 전달

기타 기이함 및 특수 효과

형식 문자열의 형식 지정자는 명령줄에서 일반 인수로 제공되거나 표현식의 결과로 생성되는지 여부에 관계없이 적절한 유형의 값으로 작동합니다.

두 개의 숫자를 더한 결과가 표시됩니다.

printf "23+32=%dn" $((23+32))

두 숫자의 합 출력하기

현재 작업 디렉토리의 폴더 수는 다음 명령으로 인쇄됩니다.

printf "%d 디렉토리가 있습니다n" $(ls -d */ | wc -l)

printf로 디렉토리 계산하기

printf 명령은 다른 프로그램에서 반환된 문자열을 인쇄합니다.

printf "현재 사용자: %sn" $(whoami)

다른 명령의 출력 인쇄

문자열 형식 지정자 "percent s"가 인수와 함께 제공되지 않으면 printf는 null을 반환합니다.

printf "하나: %s 둘: %sn" "알파"

printf가 누락된 문자열 인수를 처리하는 방법

문자열 형식 지정자 "% s"에 대해 실수로 숫자 값이 주어지면 문자열로 인쇄하고 불평하지 않습니다. C printf를 사용하여 이 작업을 수행하면 많은 문제가 발생합니다. 귀하의 소프트웨어는 거의 확실히 충돌할 것입니다. 반면에 Bash printf는 신경쓰지 않는 것 같습니다.

printf "하나: %s 둘: %sn" "알파" 777

printf가 자동으로 정수를 문자열 값으로 받아들이는 방법

정수 형식 지정자 "% d"에 인수가 주어지지 않으면 0이 인쇄됩니다.

printf "정수: %dn"

printf가 누락된 정수 인수를 처리하는 방법

정수 형식 지정자 "% d"가 실수로 문자열 입력을 받으면 Bash는 오류 메시지를 출력하고 printf는 0을 출력합니다.

printf "정수: %dn" "7"

printf가 정수 인수 대신 제공된 문자열을 처리하는 방법

어색한 기호는 "코드 포인트"라고도 하는 유니코드 번호를 입력하여 만들 수 있습니다. 문자 "u"는 특정 문자를 이스케이프하는 데 사용되며 그 뒤에 해당 유니코드 값이 옵니다.

printf "유로 기호: u20ACn"

이스케이프된 유니코드 값 인쇄

인수 문자열에서 이스케이프 시퀀스를 수용하려면 형식 문자열에서 "% s" 문자열 형식 지정자 대신 "% b" 형식 지정자를 사용하십시오.

printf "%s" "u20ACn"
printf "%b" "u20ACn"

%b 형식 지정자를 사용하여 문자열 인수의 이스케이프 시퀀스 처리

초기 printf 명령은 줄 바꿈 이스케이프 시퀀스를 인식하지 못하고 유니코드 값을 처리하지 않습니다. "% b" 형식 지정자는 두 번째 printf 명령에서 사용됩니다. 유니코드 문자가 적절하게 처리되고 새 줄이 표시됩니다.

코스용 말

경우에 따라 터미널 창에 일부 텍스트를 표시해야 할 수도 있습니다. 그러나 printf는 위치 지정 및 형식 지정을 적용해야 할 때 작업에 이상적인 도구입니다.

printf "%b" "타-" "타-" "타-" "그게 다야.n"

당신은 또한 좋아할 수 있습니다

Navhow 전 세계 사람들에게 무엇이든 하는 방법을 가르치는 데 전념하고 있습니다.

 

구독하다

어디서나 최고의 방법 뉴스레터

©2022 Navhow, 판권 소유