printf %s%s one two
印刷onetwo
が、私は欲しいoneonetwotwo
どうすればいいですか?
答え1
zshから:
printf '%1$s%1$s' one two
GNU libcの1のような次の引数の代わりにn番目の引数を取るという点だけを除い%n$s
て似ています(ただし、スタンドアロンGNUユーティリティやGNUシェルの組み込みには該当しません)。%s
printf()
printf
printf
それ2001年にzshに追加されましたprintf
いくつかのバリエーションがありますが、他の実装でも使用できます。POSIX規格の次のバージョンで指定される予定
これはzshでは機能しますが、サポートされているすべての実装printf '%s%1$s' one two
では機能しません。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()
メッセージの要素の順序は、ある言語から別の言語に変更される可能性があるメッセージのローカライゼーションの最初の使用に由来しています。