printf 動的書式設定の末尾の空白の設定

printf 動的書式設定の末尾の空白の設定

printfの '%-6s'形式を動的にする標準的な方法はありますか?

function justify
{
echo "$(printf '%-6s' $1)"
}

型に変数を挿入しようとしましたが、エラー処理形式間違い。

$(printf '%-${2}s' ${1})

答え1

コマンドの置き換えを に渡して意図が何であるかを完全にはわかりませんが、echoこれによりトリックを実行できます。

justify() {
    printf "%-${2}s\n" "$1"
}

$1引用符なしで複数のパラメータを渡すには、を使用することをお勧めします"$@"

既存の試みについて参考にするいくつかの点は次のとおりです。

  1. 変数は一重引用符で拡張されず、二重引用符を使用してください。
  2. コマンド置換を使用する必要はなく、コマンドを直接呼び出すだけです。
  3. (オプション) functionPOSIX ではないので避けてください。

答え2

シェル変数は一重引用符内では拡張されません。$文字通りのドル記号として扱われます。${2}シェル変数に拡張するには、二重引用符を使用する必要があります。

printf "%-${2}s" ${1}

printf '%-6s' $1コマンド置換を使用して出力を入力引数に渡してコマンドでecho印刷された空白文字を削除するため、質問は完全にはっきりしませんprintf。私の考えでは、あなたの機能は次のように書く方が良いです。

justify()
{
    printf "%-${2}s" $1
}

答え3

少なくともbash 4.4+では、Cスタイル1を *使用して幅または精度で利用可能な次の引数にアクセスすることが可能になります。たとえば、

justify ()
{
    printf '%-*sbar\n' "$2" "$1"
}

$ justify foo 6
foo   bar

barちょうど含まれている接尾辞は幅をfoo明確にすることです)

pround ()
{
    printf '% *.*f\n' "$2" "$3" "$1"
}

$ pround 123.45678 12 3
     123.457

1man 3 printf例を見る

関連情報