echo
echo
단일 유닉스 사양을 엄격하게 준수 하는 구현은 다음과 같은 경우 줄 바꿈을 추가합니다.
echo 'line1\nline2'
그러나 그것은 믿을만한 행동이 아닙니다. 사실, 정말이 없는 당신이 기대할 수있는 표준 동작 echo
.
OPERANDS
string
표준 출력에 쓸 문자열입니다. 첫 번째 피연산자가 -n
이거나 피연산자 중 하나에 < \
backslash> 문자가 포함 된 경우 결과는 구현 정의됩니다 .
에 XSI 준수 '의 첫 번째 피연산자 인 경우 시스템 -n
, 그것은 문자열로 취급되어야 하지 옵션 . 다음 문자 시퀀스는 XSI 준수 시스템에서 모든 인수 내에서 인식되어야합니다.
\a
- <alert>를 작성하십시오 .
\b
- <backspace>를 작성하십시오 .
\c
- 그렇지 않으면 출력에서 최종 인수 뒤에 오는 <newline> 을 억제하십시오 . \c
인수에서 다음에 나오는 모든 문자 는 무시됩니다.
\f
- <form-feed>를 작성하십시오 .
\n
- <newline>을 작성하십시오 .
\r
- <캐리지 리턴>을 작성하십시오 .
\t
- <tab>을 작성 하십시오 .
\v
- <vertical-tab>을 작성 하십시오 .
\\
- <backslash> 문자를 작성하십시오 .
\0num
-0, 1, 2 또는 3 자리 8 진수 인 8 비트 값을 씁니다 num
.
따라서 개행을 작성하는 방법을 알 수있는 일반적인 방법은 없습니다 echo
. 단지 그렇게하는 것에 만 의존 할 수 있습니다 echo
.
bash
쉘은 일반적으로 않습니다 하지 규격을 준수하고, 처리 -n
불확실 심지어 다른 옵션을하지만. 넌 할 수있어:
shopt -s xpg_echo
echo hey\\nthere
hey
there
그리고 빌드 타임 옵션으로 빌드 된 경우 에도 필요 하지 않습니다bash
...
--enable-xpg-echo-default
만들기 기능 echo
내장이 필요없이 기본적으로 백 슬래시 이스케이프 문자를 확장 -e
옵션을 선택합니다. xpg_echo
쉘 옵션 의 기본값을로 설정하면 on
Bash echo
가 Single Unix Specification 버전 3에 지정된 버전과 비슷하게 동작합니다 . 인식 하는 이스케이프 시퀀스에 대한 설명은 Bash Builtins를 참조하십시오 echo
.
printf
반면에 printf
의 행동은 비교에서 꽤 길다.
이론적 해석
이 printf
유틸리티는 이전에 제공되었던 기능을 제공하기 위해 추가되었습니다 echo
. 그러나 현존하는 다양한 버전의 비교할 수없는 차이 로 인해 echo
버전에는 특별한 기능이 거의 없으므로이 새로운 printf
유틸리티는 Ninth Edition 시스템의 기능을 기반으로합니다.
확장 설명 섹션 printf()
은 XBD 파일 형식 표기법 의 파일 형식 표기법으로 설명되어 있지만 ISO C 표준 의 기능 과 거의 정확하게 일치합니다 .
인수를 설명하는 형식 문자열을 처리합니다. 여러 가지가 될 수 있지만 문자열의 경우 %b
문자열이나 리터럴 트렁 %s
입니다. 댄 다른 %f
첫 번째 인수에 ormats, 그것은 같은 대부분의 동작 %b
YTE 문자열 인수를가 처리하지 않는다는 점을 제외 \c
탈출.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
왜 printf
보다 낫 echo
습니까?를 참조하십시오 . 이상.
echo() printf
다음 echo
과 같은 표준을 자체적으로 작성할 수 있습니다 .
echo(){
printf '%b ' "$@\n\c"
}
... 언제나 항상 올바른 일을 자동으로 수행해야합니다.
실제로, 아니오 ... \n
마지막 인수가 홀수 <backslashes>로 끝나면 인수의 끝에 리터럴 을 인쇄합니다 .
그러나 이것은하지 않습니다 :
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echo
필수? 사용할 수 있습니다printf
.