특별한 순서 없이 coreutil
s의 매개변수를 어떻게 참조합니까?printf
내가 피하고 싶은 것은 다음과 같습니다.
$ printf '%s %s %s %s %s %s %s' a c a c b c a
a c a c b c a
이것이 내가 하고 싶은 일이다:
$ printf '%s %s³ %s¹ %s³ %s² %s³ %¹' a b c
a c a c b c a
이는 Perl로 구현되었습니다.
perl -e 'printf ("%s %3\$s %1\$s %3\$s %2\$s %3\$s %1\$s\n", 'a', 'b', 'c');'
a c a c b c a
4개의 매개변수만 전달됩니다 printf
.
답변1
이 작업을 수행하는 기본 제공 방법을 찾을 수 없습니다. 다음과 같이 루프에서 언제든지 매개변수를 생성할 수 있습니다.
for 루프
$ printf '[ -d %s ] || mkdir %s; cd %s\n' `for run in {1..3}; do echo "$dir";done`
약간 다른:
$ printf '[ -d %s ] || mkdir %s; cd %s\n' $(for run in {1..3}; do echo "$dir";done)
명령의 이 부분을 변경하여 인수 수를 제어할 수 있습니다 {1..3}
.
시퀀스 및 xargs
$ printf '[ -d %s ] || mkdir %s; cd %s\n' $(seq 1 3 | { xargs -i -- echo "$dir"; })
이는 1부터 3까지의 일련의 숫자를 생성하고 { xargs -i ... }가 실행되는 횟수를 제어합니다.
예
@rici의 의견 덕분에 다음 구성을 사용할 수도 있습니다 yes ... | head -n 3
.
$ printf '[ -d %s ] || mkdir %s; cd %s\n' $(yes "$dir" | head -n 3)
인용하다
답변2
Bash의 Printf는 이 옵션을 구현하지 않습니다.
그러나 간단한 해결책은 변수를 사용하는 것입니다.
$ a=a b=b c=c
$ printf '%s %s %s %s %s %s %s\n' "$a" "$c" "$a" "$c" "$b" "$c" "$a"
a c a c b c a
위치 매개변수도:
$ set -- a b c
$ printf '%s %s %s %s %s %s %s\n' "$1" "$3" "$1" "$3" "$2" "$3" "$1"
a c a c b c a