printf %s%s one two
인쇄 onetwo
하지만 난 원해oneonetwotwo
어떻게 해야 하나요?
답변1
zsh에서:
printf '%1$s%1$s' one two
GNU libc의 1과 같은 다음 인수 대신 n번째 인수를 취한다는 점만 제외하면 %n$s
비슷합니다 (그러나 독립 실행형 GNU 유틸리티나 GNU 쉘(bash)의 내장에는 해당되지 않음) .%s
printf()
printf
printf
저것2001년에 zsh에 추가됨printf
약간의 변형이 있기는 하지만 다른 구현에서도 사용할 수 있습니다.POSIX 표준의 다음 버전에 명시될 예정
이는 zsh에서는 작동하지만 지원되는 모든 구현 printf '%s%1$s' one two
에서는 작동하지 않으며 POSIX는 지시문과 지시문 없음을 혼합하면 동작을 지정되지 않게 만듭니다.printf
%n$x
n$
또 다른 옵션은 예를 들어 익명 함수에서 배열 압축 연산자를 사용하는 것입니다.
(){ printf %s%s ${argv:^argv}; } one two
여기서 zip $argv
과 함께 로 one
one
two
two
전달 됩니다 printf
. 평소와 같이 빈 요소를 변경 "${(@)argv:^argv}"
하거나 "${@:^argv}"
그대로 둡니다.
구문 %$nX
은 printf()
POSIX이며 아마도 SVR4(SVR3이 아닌 SVR4)에서 유래했을 것입니다. nl_printf()
메시지의 요소 순서가 한 언어에서 다른 언어로 변경될 수 있는 메시지 지역화에 대한 초기 사용에서 유래했을 것입니다.