printfの '%-6s'形式を動的にする標準的な方法はありますか?
function justify
{
echo "$(printf '%-6s' $1)"
}
型に変数を挿入しようとしましたが、エラー処理形式間違い。
$(printf '%-${2}s' ${1})
答え1
コマンドの置き換えを に渡して意図が何であるかを完全にはわかりませんが、echo
これによりトリックを実行できます。
justify() {
printf "%-${2}s\n" "$1"
}
$1
引用符なしで複数のパラメータを渡すには、を使用することをお勧めします"$@"
。
既存の試みについて参考にするいくつかの点は次のとおりです。
- 変数は一重引用符で拡張されず、二重引用符を使用してください。
- コマンド置換を使用する必要はなく、コマンドを直接呼び出すだけです。
- (オプション)
function
POSIX ではないので避けてください。
答え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
例を見る