printf 명령과 혼동?


13

echo 명령을 사용하지 않고 하나의 인쇄 명령으로 다음 세 줄을 인쇄해야합니다. printf 명령을 선택했습니다. 세 줄은 다음과 같습니다.

  Different characters can be represented and supported 
  in the print command, for example: 
  x-y, X+Y, –, +, <, >, %, $, #, &.

내가 지금까지 한 일은 :

   printf "
   Different characters can be represented and supported 
   in the print command, for example: 
   x-y, X+Y, –, +, <, >, %, $, #, &.
   "

그러나 세 번째 줄 ','에 대한 bash 오류가 발생했습니다.

누구나 나를 깨우칠 것입니다.


그런데 print명령 명령에는 차이가 printf있습니다.
Flimm

답변:


12

사용하는 것이 좋습니다 :

printf "Different characters can be represented and supported\n\
in the print command, for example:\n\
x-y, X+Y, –, +, <, >, %%, $, #, &.\n"

다른 사람들이 말했듯 %이 특수하고 탈출 해야하는 성격 때문에 그 오류가 발생 합니다.

자세한 내용 man 1 printf은 참조하십시오 .


@Narwen 나는 당신이 특별한 캐릭터와 놀아야 할 때 항상 그 남자를 사용하도록 제안합니다. 사람을 검색하려면 /your_string_to_search입력 한 다음 Enter 키를 누릅니다.
Radu Rădeanu

4
요점 printf은 그 %성격과 그것이하는 일입니다!
Kaz

14

%의 특수 문자입니다 printf. 그게 오류의 원인입니다. 로 탈출해야합니다 %%.

$외부 따옴표로 큰 따옴표 안에있을 때도 대체 할 수 있으므로 ( \$) 를 이스케이프 처리해야합니다 . 작은 따옴표를 사용하는 것이 일반적으로 더 쉽습니다.


5
달러 기호 뒤에는 유효하지 않은 변수 이름이 올 때만 특별합니다.
glenn jackman

1
$variable이 아닌 쉘로 바뀝니다 printf. 큰 따옴표 대신 작은 따옴표로 문자열을 묶으 $면 쉘이 보간하지 않고에 직접 전달됩니다 printf.
Flimm

(가변 실제로 정의되어 있는지의 여부) 유효한 변수 명이 계속되는 경우 특별한되고 게다가 @glennjackman은 $또한 특별한 이어 때{ 또는 의해 특정 파라미터 기호 , 또는 하나 개 이상의 숫자 . 그러나 당신이 말하는 것에 대한 기본 아이디어는 맞습니다.
Eliah Kagan

9

이것은 %printf에 특별하다 : 형식 지정자에서 선두 문자이다. 리터럴 퍼센트를 원한다면%%


9

echo명령을 사용하도록 선택한 명령 을 사용할 수 없을 때 printf명령을 대신 사용한다는 점 은 놀랍습니다 .

왜 안돼 cat?

#!/bin/bash

cat<<'EOF'
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
EOF

그러나 질문에 따라 에코를 인쇄 명령으로 바꿔야했습니다. 그러나 도움을 주셔서 감사합니다.
Narwen

2
$foo텍스트 처럼 문자열을 해석하지 않으려면 cat <<'EOF'대신을 사용하십시오 cat <<EOF.
Lekensteyn

4

printf형식 문자열을 첫 번째 매개 변수로 사용하는 형식화 된 인쇄입니다. 나머지 매개 변수는 형식 문자열에서 사용됩니다. 사용할 때 기억해야 할 세 가지는 printf다음과 같습니다.

  1. 많은 언어에는 printf문장 / 명령 / 함수 가 있지만 언어 마다 약간 씩 다르므로 항상 언어 별 문서 (C, bash, php, perl 등)에서 세부 사항을 확인하십시오.

  2. 사용자가 제공 한 정보를 형식 문자열로 사용해서는 안됩니다. 이것은 항상 보안 결함입니다. 사용자 제공 문자열을 표시하려면과 같은 형식 문자열을 사용하십시오 "%s".

  3. 백 슬래시 ( \)와 퍼센트 기호 ( %)는 모두 이스케이프 문자이며 출력에 이스케이프 문자를 표시하려면 이스케이프 문자를 다른 매개 변수에서 이스케이프하거나 끌어 와야합니다. 달러 기호 ( $)는 printf에는 특별하지 않지만 셸에는 특별하므로 따옴표에주의하십시오.

printf숫자 서식에 좋습니다. 자세한 내용은 매뉴얼 페이지를 참조하십시오


2

다른 사람들이 언급했듯이이 %기호는을 위해 특별합니다 printf.

문자열을 그대로 인쇄하려면 printf %s첫 번째 인수로 지정하고 문자열은 두 번째 인수로 작은 따옴표로 묶으십시오.

printf %s '
Different characters can be represented and supported 
in the printf command, for example: 
x-y, X+Y, –, +, <, >, %, $, #, &.
'

큰 따옴표 대신 작은 따옴표를 사용하면 쉘이와 같은 기호를 보간하지 못합니다 $.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.