首页 > 解决方案 > 如何为 printf 动态创建格式化规则?

问题描述

我正在尝试在 30 个字符宽度的多列中打印几行:

#!/bin/bash
chars_width=15
full_string="a\\nb\\nc\\nd"
number_of_columns=$(( $(tput cols) / $chars_width ))

for ((i = 0; i < number_of_columns; i++)); do
    formatting_string="$formatting_string%%-"$chars_width"s "
done

echo "$full_string" | xargs -L $number_of_columns | \
    while read -r values
    do
        printf "$formatting_string\\n" $values
    done
exit

在运行它时,我希望它输出:

a              b              c              d

但它输出:

%-15s %-15s %-15s %-15s

如何使用我的动态构建的格式化规则printf

标签: shellformattingprintfstring-formatting

解决方案


在格式字符串中使用单个 '%' 字符。你已经逃脱了他们,所以没有任何东西可以替代。


推荐阅读