쉘의 printf에서 매개변수를 두 번 사용하는 방법은 무엇입니까?

쉘의 printf에서 매개변수를 두 번 사용하는 방법은 무엇입니까?

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)의 내장에는 해당되지 않음) .%sprintf()printfprintf

저것2001년에 zsh에 추가됨printf약간의 변형이 있기는 하지만 다른 구현에서도 사용할 수 있습니다.POSIX 표준의 다음 버전에 명시될 예정

이는 zsh에서는 작동하지만 지원되는 모든 구현 printf '%s%1$s' one two에서는 작동하지 않으며 POSIX는 지시문과 지시문 없음을 혼합하면 동작을 지정되지 않게 만듭니다.printf%n$xn$

또 다른 옵션은 예를 들어 익명 함수에서 배열 압축 연산자를 사용하는 것입니다.

(){ printf %s%s ${argv:^argv}; } one two

여기서 zip $argv과 함께 로 one one two two전달 됩니다 printf. 평소와 같이 빈 요소를 변경 "${(@)argv:^argv}"하거나 "${@:^argv}"그대로 둡니다.


구문 %$nXprintf()POSIX이며 아마도 SVR4(SVR3이 아닌 SVR4)에서 유래했을 것입니다. nl_printf()메시지의 요소 순서가 한 언어에서 다른 언어로 변경될 수 있는 메시지 지역화에 대한 초기 사용에서 유래했을 것입니다.

관련 정보