変数に保存するときにprintfで幅型を保持する方法は?

変数に保存するときにprintfで幅型を保持する方法は?

次のコードがあります

printf "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"

これにより、予想される出力が生成されます。

   24756.22971
    9910.13045
    7701.30924
   22972.27622

次のように、後で使用できるように変数の先行スペースとともにこの出力を保存したいと思います。

printf -v output "%8s.%s\n" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM" "$RANDOM"

ただし、$ output変数を印刷/エコーしようとすると、先行スペースは消えます。

24756.22971
9910.13045
7701.30924
22972.27622

ベストアンサー1

output次のような引用符なしで変数を使用しているようです。

printf '%s\n' $output

これにより、シェルは変数の文字列をスペース(デフォルトではスペース、タブ、および改行)に分割します。つまり、先行インデントを削除します。printfフォーマット文字列は各単語に再利用されるため、まだ4行の出力を取得できます。

を使用すると、echo $output1行にデータを取得できます。これはecho、パラメータ間にスペースがある各パラメータ(文字列の単語分割)を出力するためです。

代わりに、拡張子を二重引用符で囲む必要があります$output

printf '%s' "$output"

(フォーマット文字列をここに入れませんでした。\nなぜなら、文字列はすでに改行文字で終わっているので、文字列の末尾に空白行が出力されるからです。)

また見なさい:

おすすめ記事