はじめに。私はこの言語で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
C
Bashで動作を取得する方法は?ありがとうございます。
編集する:
この動作が不思議であり、パラメータの順序を変更する回避策を受け入れることができません。フォーマット文字列のみを使用しても機能します。
編集する:
たとえば、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)。gawk
ARGV
gawk
perl
\x
%b
printf
echo