![`printf "%s"`가 다음 두 문자열을 함께 연결하는 이유는 무엇입니까? [복사]](https://linux55.com/image/142606/%60printf%20%22%25s%22%60%EA%B0%80%20%EB%8B%A4%EC%9D%8C%20%EB%91%90%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%ED%95%A8%EA%BB%98%20%EC%97%B0%EA%B2%B0%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
$ printf "%s" a b
ab$ printf "%s%s" a b
ab
형식 지정자를 이해하는 데 몇 가지 문제가 있습니다 printf
. 내 말이 맞다면 기본적으로 C 프로그래밍 언어의 문자열과 동일합니다.
형식 지정자가 %s
다음 두 문자열을 함께 연결하는 이유는 무엇입니까?
%s
하나의 문자열만 표현하여 대체하고 나머지 문자열은 무시하면 어떨까요 ?
%s
under 및 under 두 문자열의 결과가 동일한 이유는 무엇입니까 %s%s
?
답변1
이것체재피연산자는 필요에 따라 재사용되어야 합니다.토론피연산자. 추가 b, c 또는 s 변환 지정자는 빈 문자열 인수가 제공된 것처럼 평가됩니다. 다른 추가 변환 사양은 0개의 인수가 제공된 것처럼 평가됩니다. 만약에체재피연산자에 변환 사양이 포함되어 있지 않으며토론피연산자가 있지만 결과가 지정되지 않았습니다.
귀하의 경우 %s
모든 매개변수를 처리하는 데 필요한 만큼 형식이 반복됩니다.
printf "%s" a b
그리고
printf "%s%s" a b
%s
두 번 반복된 첫 번째 경우와 동일한 결과를 생성합니다 %s%s
.
답변2
형식 문자열이 예상하는 것보다 더 많은 인수를 제공하면 printf
형식 문자열이 반복됩니다.
예를 들어
$ printf "%s -- %s" a b c d e
a -- bc -- de --
%s -- %s
형식이 효과적으로 반복되는 것을 볼 수 있습니다 .
예를 들어 형식 지정에 유용할 수 있습니다.
$ printf "%s -- %s\n" a b c d e
a -- b
c -- d
e --