/usr/bin/printf または Bash printf で指定された順序でパラメータを処理します。

/usr/bin/printf または Bash printf で指定された順序でパラメータを処理します。

はじめに。私はこの言語でCこのprintf関数が次のことを行うことができることを知っています:

printf('%2$s %2$s %1$s %1$s', 'World', 'Hello');

出力:Hello Hello World World

しかし、この機能はGNU Bashではサポートされていないようです。

printf '%2$s %2$s %1$s %1$s' 'World' 'Hello'

出力:bash: printf: $': invalid format character

私もlocalを使ってみました/usr/bin/printf

/usr/bin/printf '%2$s %2$s %1$s %1$s' 'World' 'Hello'

出力:/usr/bin/printf: %2$: invalid conversion specification

CBashで動作を取得する方法は?ありがとうございます。

編集する:

この動作が不思議であり、パラメータの順序を変更する回避策を受け入れることができません。フォーマット文字列のみを使用しても機能します。

編集する:

たとえば、GNU Bashのソースコードの国際化を考えてみましょう。この機能がなければ非常に不可能です。

ベストアンサー1

bash君はこれと競争できないprintfユーティリティのPOSIX仕様サポートされていません。パラメータを手動で並べ替える必要があります。

printfそして(またはprint -f)組み込み関数はksh93それをサポートしますzsh

$ printf '%2$s%1$s\n' a b
ba

GNUawkまたはGNUperlもこれをサポートしているため、どちらかがインストールされている場合は、次の関数でbash上書きできます。printf

printf() { zsh -c '"$0" "$@"' printf "$@"; }

または:

printf() { ksh93 -c '"$0" "$@"' printf "$@"; }

gawk使用するか、より多くの努力が必要です。そのまま渡すことができず、シーケンスを拡張せず(二重引用符内にコードとして逐語的に渡されない限り)、サポートしていないperlからです(シミュレーション用ユーティリティの拡張)。 V)。gawkARGVgawkperl\x%bprintfecho

おすすめ記事